LiftのO/RマッパーでPostgreSQLに接続
Lift自身には、デフォルトで組み込みDB(Apache Derby)が付属していますが、実際の環境では外部のデータベースを使用したくなることが多いと思います。ここでは、PostgreSQLに接続するサンプルコードを示しておきます。
¥todo¥pom.xml
ファイルの<dependencies>
セクションにLIST33を追加し、JDBCドライバをプロジェクトに追加します。
<dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>8.3-603.jdbc4</version> </dependency>
¥todo¥src¥main¥webapp¥WEB-INF
フォルダに¥classes¥props¥default.props
ファイルを作成し、LIST34の内容を記述します。
db.driver=org.postgresql.Driver db.url=jdbc:postgresql://192.168.111.111/test_db db.user=admin db.password=admin
さらに、¥todo¥src¥main¥scala¥bootstrap¥liftweb¥Boot.scala
を、LIST35に示すサンプルコードのように編集します。
class Boot { def boot { if (!DB.jndiJdbcConnAvailable_?) DB.defineConnectionManager(DefaultConnectionIdentifier, DBVendor) //★追加:デバッグの為に、SQLクエリをログに吐き出す DB.addLogFunc((sql,time)=>{print("SQL> "+sql+" time:"+time+"¥n")}) // where to search snippet LiftRules.addToPackages("com.liftworkshop") Schemifier.schemify(true, Log.infoF _, User) // Build SiteMap // ++ 以降を追加 val entries = Menu(Loc("Home", List("index"), "Home")) :: User.sitemap ++ Test1Table.menus LiftRules.setSiteMap(SiteMap(entries:_*))
Boot.scalaでは、59行目からのDBVendorオブジェクトでドライバの読み込みや、接続/切断/コネクションプーリングを行っています。また、17行目からのBootクラスのboot
関数の先頭(20行目)で、先ほどのDBVendorオブジェクトを設定しています。
これにより、O/Rマッパーが任意のタイミングでDBに接続できるようになります。
LiftのCRUD操作クラスの使用方法
まず、簡単にDBを操作するCRUD(挿入/表示/更新/削除)クラス「CRUDify」の使用方法から解説します。実は、このクラスは既に使用する準備は整っています。コマンドラインからLIST36のコマンドを入力し、Webアプリケーション・サーバ(jetty)を起動しましょう。LIST36の最終行が表示されれば起動完了です。
¥todo>mvn jetty:run [INFO] Scanning for projects... [INFO] artifact org.mortbay.jetty:maven-jetty-plugin: checking for updates from scala-tools.org [INFO] ------------------------------------------------------------------------ [INFO] Building todo [INFO] task-segment: [jetty:run] [INFO] ------------------------------------------------------------------------ [INFO] Preparing jetty:run ・・・(省略) [INFO] Starting jetty 6.1.16 ... 2009-06-24 03:50:38.388::INFO: jetty-6.1.16 2009-06-24 03:50:39.638::INFO: No Transaction manager found - if your webapp re quires one, please configure one. 2009-06-24 03:50:45.419::INFO: Started SelectChannelConnector@0.0.0.0:8080 [INFO] Started Jetty Server [INFO] Starting scanner at interval of 5 seconds. [INFO] Starting scanner at interval of 5 seconds.
続いてWebブラウザでhttp://localhost:8080/にアクセスすると、画面2が表示されます。枠で囲ってあるメニューが、今回追加した部分です。このリンクから、簡単なデータ操作(CRUD操作)を行うことができます。
これだけの機能が、O/Rマッパーの定義時にwith CRUDifyと記述し、Boot.scalaに数行追加するだけで得ることができます。これをカスタマイズすれば、検索機能などを追加することも可能です。