CodeZine(コードジン)

特集ページ一覧

Grailsでデータベースを利用しよう

Groovy+GrailsでRailsなWeb開発 第3回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/05/18 14:00

目次

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
図1:コマンドプロンプトから、grails create-domain-class boardsを実行する。
図1:コマンドプロンプトから、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テーブルを扱うための準備が整いました。たったこれだけ? そう、これで終わりです! 実際にデータベースにアクセスする処理などは一切不要なのです。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Groovy+GrailsでRailsなWeb開発

もっと読む

著者プロフィール

  • 掌田 津耶乃(ショウダ ツヤノ)

    三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。 ※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開中。またGoogle+プロフィールはこちら。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5