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