(快速參考)

網域類別使用

網域類別滿足模型檢視控制器 (MVC) 模式中的 M,並表示對應到基礎資料庫表的持久實體。在 Grails 中,網域是存在於 grails-app/domain 目錄中的類別。可以使用 create-domain-class 指令建立網域類別

grails create-domain-class org.bookstore.Book

或使用您最愛的 IDE 或文字編輯器。

package org.bookstore

class Book {
    String title
    Date releaseDate
    Author author
}

類別名稱預設對應到資料表名稱,以底線分隔,而非使用駝峰式大小寫,因此預設情況下,名為 BookStore 的網域類別會對應到名為 book_store 的資料表。每個屬性都對應到個別欄位。

預設資料表命名配置的一個限制是,即使定義在不同的套件中,也很難有 2 個名稱相同的網域類別。例如,com.bookstore.BookStorecom.publishing.utility.BookStore 都會對應到名為 book_store 的資料表。如果這 2 個類別定義在應用程式中,可以透過為類別提供不同的名稱,或為其中一個或兩個類別提供偏離預設值的特定期限名稱來管理此問題(請參閱使用者指南的 ORM DSL 區段以取得更多詳細資料)。如果其中一個或兩個網域類別是由外掛程式提供的,應用程式作者可能無法存取這些選項。為協助管理此類情況,預設情況下,GORM 可以設定為在資料表名稱前加上外掛程式名稱。例如,如果 com.publishing.utility.BookStore 網域類別是由名為 PublishingUtilities 的外掛程式提供的,預設資料表名稱可以是 publishing_utilities_book_store。若要啟用該行為,必須將 grails.gorm.table.prefix.enabled 設定屬性設定為 true。範例

grails-app/conf/runtime.groovy
grails.gorm.table.prefix.enabled = true

參閱設定區段,以取得更多有關定義設定選項的詳細資料。

參閱使用者指南中的GORM區段,以取得更多資訊。

Spring 自動注入網域實例

自 Grails 3.2.8 起,網域實例的 Spring 自動注入已預設停用,因為它會造成效能瓶頸。如果您正在自動注入服務至網域實例,您需要重新啟用它。

對於 Grails 3.3.0 或更高版本,您可以在單一網域類別中開啟自動注入

grails-app/domain/demo/Book.groovy
class Book {
    BookService bookService

    String name

   static mapping = {
       autowire true
   }
   ...
   ..
   .
}

您可以使用預設對應設定,為所有網域類別開啟自動注入

grails-app/conf/runtime.groovy
grails.gorm.default.mapping = {
        autowire true
}

對於 Grails 3.3.0 以下版本,您可以透過變更grails.gorm.autowire設定參數來重新啟用它。

grails-app/conf/application.yml
grails:
    gorm:
        autowire: true
如果啟用網域實例的 Spring 自動注入,讀取效能將會降低。