概要
Scala ActiveRecord
は以下の特徴を持っています。
Ruby on Rails の ActiveRecord のようなインターフェース
よくある Java 製 ORM ライブラリの場合、 JDBC接続するための何らかの Manager クラスを介して操作する必要が
あるなどインターフェースが直感的ではないものが多いと思います。
Scala ActiveRecord では Scala の ケースクラスおよびスキーマ定義と それに対応するコンパニオンオブジェクトを定義するだけで
Ruby on Rails の ActiveRecord のようなインターフェースで DB操作が行えます。
例えば、以下のコード 例1 のような2行のモデルとコンパニオンオブジェクトを定義すると、
コード 例3 のように Person
モデルに対する find, save, delete などの CRUD操作が可能となります。
例1 : モデル定義 src/main/scala/models/Person.scala
package models
import com.github.aselab.activerecord._
import com.github.aselab.activerecord.dsl._
case class Person(name: String, age: Int) extends ActiveRecord
object Person extends ActiveRecordCompanion[Person]
例2 : スキーマ定義 src/main/scala/models/Tables.scala
package models
import com.github.aselab.activerecord._
import com.github.aselab.activerecord.dsl._
object Tables extends ActiveRecordTables {
val people = table[Person]
}
例3: モデルを使用したDB操作 src/main/scala/App.scala
import com.github.aselab.activerecord.dsl._
import models._
import scala.language.postfixOps
object App extends App {
// DBへの保存処理
Person("Alice", 43).save
Person("Bob", 37).save
Person("Eve", 43).save
Person("Steve", 35).save
// DBへの参照処理
Person.findBy("name", "Alice")
//=> Some(Person("Alice", 43)) が返る
Person.findAllBy("age", 43).toList
//=> List(Person("Alice", 43), Person("Eve", 43)) が返る
Person.where(_.age.~ <= 40).orderBy(_.age desc).toList
//=> List(Person("Bob", 37), Person("Steve", 35)) が返る
}
上記につきまして Scastieの実行可能コード で実際にブラウザ上で動作検証することができますので、ぜひご確認ください。
XMLレスな O/R マッピング
Java の DB操作ライブラリにありがちな 大量の XML ファイルによる設定ファイルを作成することなく使用できます。
設定ファイルも1つのみで済むシンプルなものとなっています。
DB接続に関するコードがほぼ不要
設定ファイルに接続する データベースの情報(URL・ユーザ名・パスワードなど)を書いておくだけで
コネクションプールを介した データベース接続を行うことが可能です。
また、設定が書かれていない場合はデフォルト値が用意されているなど、 CoC の考え方に則っています。