読者です 読者をやめる 読者になる 読者になる

hogepiyoエンジニアリング

トラブルシューティングからノウハウ、作ってみた系まで扱う情報系ブログ

Slick 3 系スタートキット

Slick Scala ORM

今回は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用)。

これgithub.com

サンプルではローカルに立てられている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を使って作ってたアプリケーションの紹介でもする。