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