Slick 3 系スタートキット
今回はSlick 3系の使い方のお話。
Slickとは
SlickはScalaで使えるORM.
3系は2015年4月29日にリリースされたということで割りと最近に出てきた代物。
Slick 3.0.0 | Slick
日本語のドキュメントも用意してくれている。
slick-doc-ja 3.0 — はじめよう
実際に使ってみた方もいらっしゃる。takezoe.hatenablog.com
そのうえサンプルプロジェクトも用意されている。www.typesafe.com
Slickを使用方法サンプル
もはやこの上なにを書くんだという感じだが、検索してみつかるサンプルはクエリの書き方だけ紹介してるものが多かったり、Scala初級者の自分にはhello-slick-3.0さえ難しく感じたのでだいぶ簡略化した動く状態のサンプルを作ってみた(PostgreSQL用)。
サンプルではローカルに立てられているPostgreSQLに対して、Readmeに書いてあるDDLを実行してテーブルを作成している前提でCRUD操作を行う。
また、SlickにはDBのテーブルに接続して自動的にテーブルに対応したエンティティクラスを作成してくれる機能もあるのでそのためのコードも入れてある。
Slickではまった箇所の紹介
暗黙的型変換
import slick.driver.PostgresDriver.api._ import scala.concurrent.ExecutionContext.Implicits.global
これないとresultメソッドが呼び出せない/(^o^)\
これが暗黙的型変換か。ここで定義されているメソッドだからimportしてあげないと使えないんですね。
よくサンプルで出てくるクエリでは .resultって呼び出しているのに自分の環境でやるとそんなメソッドないよって怒られて「なんで???」ってなってた。
Future
クエリを発行したはずなのに結果が受け取れない
Slick3系はFutureモデルで作られているのでクエリを発行してから結果を受け取るまでは非同期になる.
が、Await.readyとかしてクエリの結果を受け取るまで待っていないとメインスレッドが終わってしまって結果が受け取れないまま終わってしまう。
Futureがわかってなかった。
そのうちSlickを使って作ってたアプリケーションの紹介でもする。