MySQLに変更するなら?
この設定の修正を行うだけで、他のデータベースを使うように変更できます。例えば、MySQLに「grails_db
」というデータベースを用意し、これを利用するようにしたい、としましょう。その場合、次のように変更をすればよいのです。
・dataSourceの設定 dataSource { pooled = true driverClassName = "com.mysql.jdbc.Driver" username = "root" // ユーザ名 password = "" // パスワード } ・environmentsのdevelopment設定 development { dataSource { dbCreate = "update" // 内容を保持し更新する url = "jdbc:mysql://localhost/grails_db" // アクセス先 } }
これでMySQLのデータベースを利用するようになります。実際にMySQLを利用している人は、試してみるとよいでしょう。データベースの変更に必要な処理はこれだけで、ドメインクラスやコントローラーに記述したスクリプトはすべて変更する必要はありません。
このようにデータベースを変更して動かしてみると、フレームワークの威力というのが実感できます。例えば、JSP/サーブレットだけでデータベースアクセスをするプログラムを書いていたときのことを思い返してみてください。使用するデータベースが変更になった、というとき、どれだけ面倒な作業を強いられることになったでしょうか。特に、あまり開発に慣れておらず、いい加減に設計してあちこちにデータベースアクセスの処理が散らばっていた場合には、すべてを取りこぼしなく修正するのはかなり面倒くさいことになるのは容易に想像がつきます。Grailsであれば、データベース変更に必要な作業は、ただこのDataSource.groovyファイルの設定を変更すること、それだけなのです。
とりあえず、ここではすべてデフォルトのままにして話を進めることにします。実際にデータベースアクセスができることさえ確認できれば、必要に応じて実際に使用しているデータベースに設定を書き換えればいつでも変更できるのですから。
HSQLDBでレコードを残すには?
実際に初期設定のままデータベースの操作をいろいろと試してみると、サーバを終了する際にレコードがすべて消えてしまい、次に起動すると空っぽになってしまうことに気が付くはずです。これは、デフォルトの設定がHSQLDB
の「メモリモード」を使用しているためです。
HSQLDB
は、通常のデータベースサーバにクライアントとしてアクセスするモードの他に、直接ファイルにアクセスするモード、そしてメモリ上にデータを保管するモードを備えています。デフォルトのdataSource
設定では、このメモリモードを使っているために、作成したレコードはすべてメモリ上に保存され、終了時にすべて消えてしまうのです。
もし、レコードをファイルに保存し保持し続けるようにしたければ、development
の内容を次のように修正しましょう。
development { dataSource { dbCreate = "update" url = "jdbc:hsqldb:file:devDB;shutdown=true" } }
これで、データベースの内容は、アプリケーションフォルダ内に「devDB
」というデータベース名で保存されるようになります。この先、データベース関係の機能をいろいろと作っていきますが、最初からレコードがまったく何も用意されていないと表示の確認ができないなど不便を感じるかもしれません。その場合は、このようにdevelopment
を修正し、ファイルにレコードを保存するようにしておくとよいでしょう。
ドメインクラスの作成
設定ファイルがわかったところで、続いてドメインクラスの作成を行いましょう。今回は、「BOARDS
」というテーブルを用意し、そこに簡単なデータを保管し利用することにします。テーブルの内容としては、ざっと次のような感じで考えます。
- 「ID」-整数値。プライマリキーとして用意します。
- 「NAME」-文字列。名前を保管します。
- 「TITLE」-文字列。タイトルを保管します。
- 「CONTENT」-文字列。具体的な内容を保管するものです。
まぁ、簡単な掲示板、メモ書き、ブログ、そういったもののデータを保管するものをイメージしてください。では、ドメインクラスを作成しましょう。コマンドプロンプトを起動し、アプリケーションのディレクトリに移動して、次のように実行します。
grails create-domain-class boards
これで、grails-app内の「domain」フォルダの中に、「Boards.groovy」というファイルが作成されます。ドメインクラスは、このように「domain」フォルダの中に用意されます。これを開くと、次のようなソースコードが生成されています。
class Boards { static constraints = { } }
コントローラーやビューと同様、モデルであるドメインクラスでも、明確な命名ルールが制定されていることがよく分かります。ドメインクラスでは、
ファイル名 テーブル名.broovy クラス名 テーブル名
という形でファイルとクラスが生成されます。ということは、grails
コマンドを使わずとも、命名ルールに従ってファイルを用意すれば、ちゃんとドメインクラスは使えるようになる、ということです。
では、このドメインクラスに、利用するBOARDS
テーブルのフィールド情報を追記しましょう。次のようにクラスを修正してください。
class Boards { Long id String name String title String content static constraints = { } }
クラスの中に、テーブルに用意されているフィールドのプロパティを追加しました。それぞれ、フィールド名と同じ名前で、値のタイプもそろえてあります。これで、Boards
クラスでBOARDS
テーブルを扱うための準備が整いました。たったこれだけ? そう、これで終わりです! 実際にデータベースにアクセスする処理などは一切不要なのです。