Dự án Grails được gây cảm hứng từ sự thịnh hành của “Ruby on Rails” – framework đã đem lại nhiều thay đổi mới mẻ trong cách thức lập trình web. Với Ruby on Rails (RoR), những công việc lặp đi lặp lại thường thấy được tự động hóa, một số mô hình và giao diện có thể được tự phát sinh, và môi trường lập trình được hỗ trợ tối đa. Tất cả những điều đó đã nhanh chóng đưa RoR lên một vị trí được trọng vọng trong thế giới programmer.

Với mong muốn có một “RoR” kết hợp được sức mạnh  những nền tảng Java kinh điển: Spring, Hibernate, SiteMesh… Peter Ledbrook và đồng nghiệp đã quyết định xây dựng “Groovy on Grails”. Một framework đã dần thành hình và phát triển mạnh mẽ từ đó.

Sức mạnh của Grails có thể tóm gọn lại ở những yếu tố sau:

  1. Tăng năng suất lập trình: Grails giúp tự động hóa những công việc và các câu truy vấn đơn giản(dynamic finder), hỗ trợ scaffolding, và hệ thống taglib giúp lập trình viên xử lý html một cách rất dễ dàng.
  2. Giản dị hóa những công nghệ lập trình như Spring, Hibernate: Giúp cho việc học và sử dụng dễ dàng với những ứng dụng đơn giản; mà vẫn đảm bảo tính linh hoạt, khả chuyển của những công nghệ gốc khi cần thiết.
  3. Quen thuộc với lập trình viên Java: lập trình viên có thể lập trình bằng hai ngôn ngữ Groovy và Java, thậm chí trộn chung lẫn nhau chương trình cũng vẫn chạy. Điều này giúp rút ngắn thời gian học Grails cho Java-developer.
  4. Cộng đồng sử dụng Grails rất tích cực: Mọi vấn đề nảy sinh đều được nhanh chóng thông báo; các phiên bản Grails cũng liên tục được cập nhật để đáp ứng kịp thời các nhu cầu của môi trường công nghiệp.
  5. Thư viện plug-in phát triển phong phú: Cơ chế plug-in của Grails cho phép người sử dụng có thể dễ dàng mở rộng các tính năng của web-application, đồng thời cũng có thể public các plugin này để chia sẻ với cộng đồng. Ví dụ, cần gửi mail từ server? Chỉ cần cài đặt plugin Mail , cấu hình mail server và thêm 1 dòng code gọi service!
  6. Groovy: một ngôn ngữ độc đáo và thú vị.

Demo trang web crud sinh tự động bằng Scaffolding

1.Tạo database

mysql> CREATE DATABASE student;
mysql> CREATE DATABASE student_prod;

2. Tạo project crud_example có cấu trúc như sau:

3.Update BuildConfig.groovy trong grails-app/conf

    dependencies {
         runtime 'mysql:mysql-connector-java:5.1.29'
    }

4. Update DataSource.groovy trong grails-app/conf

dataSource {
    pooled = true
    jmxExport = true
    driverClassName = "com.mysql.jdbc.Driver"
    dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
    username = "root"
    password = "123456"
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
//    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
    singleSession = true // configure OSIV singleSession mode
    flush.mode = 'manual' // OSIV session flush mode outside of transactional context
}

// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:mysql://localhost/student?useUnicode=yes&characterEncoding=UTF-8"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:mysql://localhost/student_prod?useUnicode=yes&characterEncoding=UTF-8"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:mysql://localhost/student_prod?useUnicode=yes&characterEncoding=UTF-8"
            properties {
               // See http://grails.org/doc/latest/guide/conf.html#dataSource for documentation
               jmxEnabled = true
               initialSize = 5
               maxActive = 50
               minIdle = 5
               maxIdle = 25
               maxWait = 10000
               maxAge = 10 * 60000
               timeBetweenEvictionRunsMillis = 5000
               minEvictableIdleTimeMillis = 60000
               validationQuery = "SELECT 1"
               validationQueryTimeout = 3
               validationInterval = 15000
               testOnBorrow = true
               testWhileIdle = true
               testOnReturn = false
               jdbcInterceptors = "ConnectionState"
               defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED
            }
        }
    }
}

5. Tạo domain class

Tạo domain Student sử dụng lệnh:

grails create-domain-model com.example.Student

Update file Student.groovy trong grails-app/domain/com/example

Student.groovy

package com.example
import java.util.Date;
class Student {

    String firstName
    String middleName
    String lastName
    String className
    Integer age
    String address
    Date   birthday
    static constraints = {
    }
}

6. Tạo controller cho Student.groovy

Sử dụng lệnh: grails create-controller com.example.Student

Update file StudentController.groovy trong grails-app/controller/com/example

Định nghĩa scaffold để tự động sinh chức năng thêm, sửa, xóa, xem 

StudentController.groovy

package com.example

class StudentController {

    def scaffold = Student
}

7. Kết quả run

grails run-app

Hy vọng bài viết sẽ giúp các bạn hiểu sơ bộ về Grails

Các bạn có thể tham khảo mã nguồn chương trình tại đây: https://github.com/nguyentridung/crud_example


Leave a Comment

Fields with * are required.