知識庫 / Spring RSS 訂閱

Grails 3 與 GORM 入門指南

Persistence,Spring
HongKong
4
02:52 PM · Dec 06 ,2025

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 提供了一個快速入門指南,旨在幫助您快速上手該框架。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.