1. 概述
這是一份關於 Grails 3 和 GORM 的快速介紹。
我們當然會使用 Groovy,並且 – 隱含地 – 該框架也利用了 Hibernate 進行 ORM、Spring 框架進行依賴注入、SiteMash 用於佈局和主題等。
2. 數據源配置
我們可以無需指定任何顯式數據源配置開始 – 默認情況下 Grails 使用 HSQLDB 數據庫用於開發和測試環境。
但是,如果您想更改這些默認設置,可以在 application.yml 中定義您選擇的數據源:
environments:
development:
dataSource:
driverClassName : "com.mysql.jdbc.Driver"
url : "jdbc:mysql://localhost:8080/test"
dialect : org.hibernate.dialect.MySQL5InnoDBDialect
同樣,我們也可以在此創建多個環境,例如在 開發 環境旁邊,如果需要的話。
3. 領域 (Domain)
Grails 能夠根據數據庫配置中 dbCreate 屬性,為我們的領域類創建數據庫結構。
下面我們定義一個領域類:
Class User {
String userName
String password
String email
String age
static constraints = {
userName blank: false, unique: true
password size: 5..10, blank: false
email email: true, blank: true
}
}請注意,我們可以在模型中直接指定 驗證約束,這保持了整潔和無註釋的狀態。
這些約束將在實體持久化時由 Grails 自動檢查,如果任何約束被違反,框架將拋出適當的驗證異常。
我們還可以通過在 mapping 屬性中指定 GORM 映射。
static mapping = { sort "userName" }現在如果我們調用 User.list() – 我們將獲得按 username 排序的結果。
當然,我們也可以通過將排序參數傳遞給列表 API 來達到相同的效果:
User.list(sort: "userName")4. CRUD 操作
當我們查看 API 操作時,腳手架在初期起着非常重要的作用;它允許你為領域類生成基本的 CRUD API,包括:
- 必要的視圖
- 標準 CRUD 操作的控制器動作
- 兩種類型:動態和靜態
以下是如何使用動態腳手架的工作方式:
class UserController {
static scaffold = true
}僅僅通過編寫這行代碼,框架將在運行時生成 7 個方法:show、edit、delete、create、save 和 update。這些方法將作為特定領域實體的 API 發佈。
靜態腳手架示例:
- 要使用腳手架生成視圖,請使用:“grails generate-views User“
- 要使用腳手架生成控制器和視圖,請使用:“grails generate-controller User“
- 要使用單個命令生成所有內容,請使用:“grails generate-all User“
這些命令將自動生成特定領域對象的必要管道。
現在,讓我們快速瞭解如何使用這些操作——例如,對於我們的 User 領域對象。
要 創建新的“user”記錄:
def user = new User(username: "test", password: "test123", email: "[email protected]", age: 14)
user.save()要檢索單個記錄:
def user = User.get(1)
此 get API 將以可編輯模式檢索域名對象。對於只讀模式,可以使用 read API:
def user = User.read(1)為了更新現有記錄:
def user = User.get(1)
user.userName = "testUpdate"
user.age = 20
user.save()
以下是對現有記錄的簡單刪除操作:
def user = User.get(1)
user.delete()5. GORM 查詢
GORM 提供了強大的查詢功能,允許你從數據庫中檢索數據。以下是一些常用的 GORM 查詢方法:
-
Find(): 查找所有符合條件的記錄。// 查找所有 User 記錄 users := database.Model(User{}).Find(&user) -
Where(): 根據條件篩選記錄。// 查找所有年齡大於 30 的 User 記錄 users := database.Model(User{}).Where("age > ?", 30).Find(&user) -
First()/Last(): 獲取第一個或最後一個記錄。// 獲取第一個 User 記錄 user := database.Model(User{}).First(&user) -
Order(): 按照指定的字段排序結果。// 按照年齡升序排列 User 記錄 users := database.Model(User{}).Order("age ASC").Find(&user) -
Limit(): 限制返回結果的數量。// 返回前 10 條 User 記錄 users := database.Model(User{}).Limit(10).Find(&user)
5.1. 查找 (find)
我們首先介紹 查找 (find) API:
def user = User.find("from User as u where u.username = 'test' ")我們還可以使用不同的語法來傳遞參數:
def user = User.find("from User as u where u.username?", ['test'])我們還可以使用命名參數:
def user = User.find("from User as u where u.username=?", [username: 'test'])5.2. findBy
Grails 提供了一個動態查找機制,它使用領域屬性在運行時執行查詢並返回第一個匹配的記錄:
def user = User.findByUsername("test")
user = User.findByUsernameAndAge("test", 20)
user = User.findByUsernameLike("tes")
user = User.findByUsernameAndAgeNotEquals("test", "100")您可以在這裏找到更多表達方式 這裏。
5.3. 準則
我們可以使用一些靈活的準則來檢索數據:
def user = User.find { username == "test"}
def user = User.createCriteria()
def results = user.list {
like ("userName", "te%")
and
{
between("age", 10, 20)
}
order("userName", "desc")
}請注意:當使用條件查詢時,請使用“{ }”而不是“( )”。
5.4. 執行查詢/更新
GORM 也支持 HQL 查詢語法 – 用於讀取操作:
def user = User.executeQuery(
"select u.userName from User u where u.userName = ?", ['test'])以及寫操作:
def user = User.executeUpdate("delete User u where u.username =?", ['test'])6. 結論
這為 Grails 和 GORM 提供了一個快速入門指南,旨在幫助您快速上手該框架。