しおしお

IntelliJ IDEAのことなんかを書いてます

Grailsでデータベースに初期データをセットアップする方法

データベースに初期データをセットアップするには、BootStrap.groovyでドメインクラスを使用してデータのセットアップをする。

以下のようにinitで、ドメインクラスを使用してデータをセットアップする。
この例では、Quoteにデータが存在していない場合にはデータをセットアップしないようにしています。もっと細かくセットアップの事前条件を定義したい場合には、ドメインクラスで提供される各種findメソッドを使うといいのではないでしょうか。

class BootStrap {
    def init = { servletContext ->
      if (!Quote.count) {
        new Quote(author: 'author', content: 'content').save()
      }
    }
    def destroy = {
    }
}

もし大量にデータをセットアップしたい場合には、セットアップ処理を持ったクラスを作成してBootStrap.groovyと同じディレクトリ(conf配下)に置いてあげるとよいようです。
こうすると、BootStrapが肥大化するのを防止できます。

  • BootStrap.groovy
class BootStrap {
    def init = { servletContext ->
      QuoteData.setup()
    }
    def destroy = {
    }
}
  • QuoteData.groovy
import qotd.Quote

class QuoteData {

  def static setup() {
    if (!Quote.count) {
      new Quote(author: 'author', content: 'content').save()
      new Quote(author: 'author2', content: 'content2').save()
    }
  }
}