はじめに
今回は、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つのモードのいずれかを指定します。