Grails 3とGORMの紹介

Grails 3とGORMの紹介

1. 概要

これはGrails 3とGORMの簡単な紹介です。

もちろん、Groovyを使用します。暗黙的に、フレームワークはORM用のHibernate、依存性注入用のSpring Framework、レイアウトとテーマ用の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

同様に、必要に応じて、developmentの横に複数の環境を作成できます。

3. ドメイン

Grailsは、データベース構成のdbCreateプロパティに基づいて、ドメインクラスのデータベース構造を作成できます。

ここで、これらのドメインクラスの1つを定義しましょう。

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
    }
}

validation constraints right in the modelを指定する方法に注意してください。これにより、物事がすっきりときれいに保たれ、注釈がなくなります。

これらの制約は、エンティティが永続化されるときにGrailsによって自動的にチェックされ、これらの制約のいずれかが壊れている場合、フレームワークは適切な検証例外をスローします。

モデルのmappingプロパティでGORMマッピングを指定することもできます。

static mapping = { sort "userName" }

ここで、User.list()を呼び出すと、結果sorted by usernameが返されます。

もちろん、ソートをリストAPIに渡すことで同じ結果を得ることができます。

User.list(sort: "userName")

4. CRUD操作

API操作を見ると、最初はscaffoldingが非常に興味深い役割を果たします。これにより、次のようなドメインクラスの基本的なCRUDAPIを生成できます。

  • 必要なビュー

  • 標準CRUD操作のコントローラーアクション

  • 2つのタイプ:動的および静的

これが動的スキャフォールディングでどのように機能するかを次に示します。++

class UserController {
    static scaffold = true
}

この1行を記述するだけで、フレームワークは実行時に7つのメソッドを生成します:show、edit、delete、create、saveおよびupdate。 これらは、その特定のドメインエンティティのAPIとして公開されます。

静的な足場の例:

  • スキャフォールディングを使用してビューを作成するには、「grails generate-views User」を使用します。

  • コントローラーを作成し、スキャフォールディングを使用して表示するには、「grails generate-controller User」を使用します。

  • 1つのコマンドですべてを作成するには、「grails generate-all User」を使用します。

これらのコマンドは、その特定のドメインオブジェクトに必要な配管を自動生成します。

これらの操作の使用方法を簡単に見てみましょう。たとえば、Userドメインオブジェクトの場合です。

create new “user” recordへ:

def user = new User(username: "test", password: "test123", email: "[email protected]", age: 14)
user.save()

fetch a single recordへ:++

def user = User.get(1)

このget APIは、編集可能モードでドメインオブジェクトを取得します。 読み取り専用モードの場合、readAPIを使用できます。

def user = User.read(1)

update existing recordへ: `++`

def user = User.get(1)
user.userName = "testUpdate"
user.age = 20
user.save()

そして、既存のレコードの単純な削除操作:++

def user = User.get(1)
user.delete()

5. GORMクエリ

5.1. find

findAPIから始めましょう。

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")

より多くの式hereを見つけることができます。

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の非常に簡単な入門書であり、フレームワークを開始するためのガイドとして使用されます。