はじめに
今回は、MVCの「M(Model)」について説明を行うことにしましょう。Modelは、データベースとのやり取りなどを管理する部分です。データベースに問い合わせをしたり、必要なデータを受け取ったりするのはすべてモデルの担当となります。
ただし、勘違いしてはならないのが、「モデルの中に、特定のデータベースに接続しデータを取得する処理を作成するわけではない」という点でしょう。モデルの中で、データベース接続の処理を書いたり、クエリーを送信したりすることはありません。それらはすべて「ドメインクラス」が行ってくれるのです。
対象読者
- JSPを書くのは正直しんどい・・・と近頃感じる人。
- Ruby on Railsスタイルの開発に興味があるという人。
- MVCフレームワークをJavaで学びたい、という人。
Grailsのデータベース利用
多くのMVCフレームワークには、各種のデータベースに接続するための基本的な仕組みが用意されています。Grailsも同じで、データベースアクセスの処理をプログラマが書くことはまずありません。必要なのは、利用するデータベースにアクセスするために必要な情報を提供することです。どういうデータベースを使うのか、その情報さえあれば、Grailsはちゃんとそこにアクセスできるのです。
Grailsでデータベースを利用するためには、大きく2つのものを用意する必要があります。それは「設定ファイル」と「ドメインクラス」です。これらは次のようなものです。
- 「設定ファイル」-Grailsでは、データベースの種類や、利用するテーブルの情報などを専用の設定ファイルに記述します。Grailsでは設定ファイルを記述することはあまりありませんが、これらについてはファイルに記述をしておく必要があります。
- 「ドメインクラス」-MVCの「M」を担当するプログラムです。Grailsでは、Modelはドメインクラスと呼ばれるクラスとして定義します。ここでテーブルの構造や必要な処理などを記述します。
設定ファイルは、Webアプリケーションごとに1つ記述するだけです。これは利用するデータベースに関する情報が用意されます。ドメインクラスは、そのデータベースに保管されているテーブルに関する情報が記述されます。通常、利用するテーブルがいくつかあれば、それぞれにドメインクラスを作ります。
データソース設定の用意
では、データベースの設定ファイルから作成しましょう。設定ファイルは、grails-app内の「conf」フォルダ内にある「DataSource.groovy」ファイルに記述されています。ここには、dataSource、hibernate、environmentsといったプロパティが用意されています。それぞれデータソース、Hibernate、実行環境の設定です。ここにHibernateの設定が含まれていることに驚いた人もいることでしょう。実をいえば、GrailsにはHibernateが内包されており、データベースアクセスの際に利用されているのです。
初期状態での記述をチェックしましょう。まずはデータベースアクセスに直接関係する「dataSource」からです。これは次のようになっています。
dataSource {
pooled = true
driverClassName = "org.hsqldb.jdbcDriver"
username = "sa"
password = ""
}
初期状態では、使用データベースは「HSQLDB」になっています。HSQLDBはオープンソースのpure Javaなデータベースプログラムです。データベースプログラムとしては非常に小さいもので、Grailsに内蔵されています。
ここでは、driverClassNameにHSQLDBのドライバークラス(org.hsqldb.jdbcDriver)を設定し、usernameにユーザー名(sa)、passwordにパスワード(空のテキスト)が指定されています。このように、ドライバークラスと利用者名、パスワードを指定するだけで、そのデータベースにアクセスできるようになるのです。
データベースの環境設定
続いて、environmentsをみましょう。こちらは、データベースアクセスに関する環境設定を行うもので、次のように記述されています。
environments {
development {
dataSource {
dbCreate = "create-drop" // one of 'create', 'create-drop','update'
url = "jdbc:hsqldb:mem:devDB"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:mem:testDb"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:hsqldb:file:prodDb;shutdown=true"
}
}
}
environmentsの中に、development、test、productionといったプロパティが用意されており、それぞれの中にdataSourceが設定さていることが分かります。この3つの値は、それぞれ「開発段階」「テスト用」「正式公開用」の設定です。開発時に使われるのは、developmentに記述されている設定になりますので、ここを設定すればデータソースを変更できます。
dataSourceでは、dbCreateでデータ作成のモード指定を、urlで接続するデータベースのURLをそれぞれ指定します。dbCreateが少々分かりづらいですが、これは「データを新規に作る(create)」「データを作成し、終了時に破棄する(create-drop)」「既にあるものを更新していく(update)」という3つのモードのいずれかを指定します。
