1. 概要

これは、Grails3とGORMの簡単な紹介です。

もちろん、Groovyを使用します。暗黙的に、フレームワークはORM用のHibernate、依存性注入用の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. ドメイン

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

モデル検証制約を指定していることに注意してください。これにより、物事がすっきりと整理され、注釈がなくなります。

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

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

static mapping = { sort "userName" }

ここで、 User.list()を呼び出すと、ユーザー名でソートされた結果が返されます。

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

User.list(sort: "userName")

4. CRUDオペレーション

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

  • 必要な見解
  • 標準のCRUD操作のコントローラーアクション
  • 2つのタイプ:動的と静的

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

class UserController {
    static scaffold = true
}

この1行を記述するだけで、フレームワークは実行時に7つのメソッド(表示、編集、削除、作成、保存、更新)を生成します。 これらは、その特定のドメインエンティティのAPIとして公開されます。

静的足場の例:

  • スキャフォールディングを使用してビューを作成するには、「 grails generate-viewsUser」を使用します。
  • コントローラーを作成し、スキャフォールディングを使用して表示するには、「 grails generate-controllerUser」を使用します。
  • すべてを1つのコマンドで作成するには、「 grails generate-allUser」を使用します。

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

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

新しい「ユーザー」レコードを作成するには

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

単一のレコードをフェッチするには

def user = User.get(1)

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

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クエリ

5.1. 検索

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

より多くの表現を見つけることができますここ

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