現実逃避のためにScalaのORマッパーを使ってみおうと思ってSlick使ってみた。
環境
Slick公式サイトのDocument読んでやりますた。
Slick自体はScalaのversionが2.10移行でないと使えないみたいですね。
なので、私の環境は2.9だったんですが、アップデートできました。
Slickに感謝です←
※ 公式ではドライバに H2 Database Engine を使ってましたが、今回はmysqlを利用しました。
主に使用したファイルは以下の感じ
/ src / main / scala / Hoge.scala
/ src / main / scala / Hogetable.scala
/ build.sbt
とりあえず、build.sbtに依存するライブラリを記述します。
/libにjarファイルを追加しても構いません。
libraryDependencies ++= List(
"com.typesafe.slick" %% "slick" % "1.0.0",
"org.slf4j" % "slf4j-nop" % "1.6.4",
"mysql" % "mysql-connector-java" % "5.1.27"
)
Model (Schema)のクラスが
Hogetable.scala
import scala.slick.driver.MySQLDriver.simple._ import Database.threadLocalSession object Hogetable extends Table[(Int, String, String)]("User") { def id = column[Int]("id", O.PrimaryKey) def name = column[String]("name") def email = column[String]("email") def * = id ~ name ~ email }
import scala.slick.driver.MySQLDriver.simple._ import Database.threadLocalSession object Hoge { def main(args: Array[String]):Unit = { Database.forURL("jdbc:mysql://localhost/test", driver = "com.mysql.jdbc.Driver") withSession { try { (Hogetable.ddl).drop } try { (Hogetable.ddl).create Hogetable.insert(1, "hogehoge","hogehoge@example.com") Hogetable.insert(50, "fugafuga","fugafuga@example.com") Hogetable.insert(101, "piyopiyo","piyopiyo@example.com") Query(Hogetable) foreach { case (id:Int, name, email) => println(id + " : " + name + " → "+ email) } } catch { case e:Exception => println(e) } } } }
テーブルは
DB : test
Table : User
でこんな感じ
(test)> desc User; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(254) | NO | | NULL | | | email | varchar(254) | NO | | NULL | | +-------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
実行結果は以下の様な感じ
[info] Running Hoge
1 : hogehoge → hogehoge@example.com
50 : fugafuga → fugafuga@example.com
101 : piyopiyo → piyopiyo@example.com
[success] Total time: 3 s, completed 2013/12/08 21:19:23
便利ですなぁ
ちなみに、ドキュメントのコピペして
import scala.slick.driver.H2Driver.simple._ //mysqlはこっち → import scala.slick.driver.MySQLDriver.simple._
のようになってて、Mysqlシンタックスエラーがめちゃくちゃでて悩んでたのは内緒の話