Screaming Loud

日々是精進

slickのcode generatorをmysqlで動かしてみた

slickのcode generatorを使ってみました。

code generatorとは、DBの接続するscalaファイルをsbtコマンドを使うことで作成してくれるものです。


slick/slick-codegen-example · GitHub
では、H2Driverを使っての例なため、MySQLDriverを使ってやってみました。

仕組み

project/Build.scala

の記述を元にDB接続クラスを作成します。

Build.scalajdbcドライバをmysqlなどに向けると、その接続先のカラム情報を取得して、そこからscalaファイルを作成します。
この場合、MySQLの指定したDatabaseの全てのテーブルが1ファイルにかかれてしまうため、
Build.scalaではmysqlドライバではなく、H2ドライバを用いてcreate文から出力するようにします。
(自分がやり方を知らないだけで、方法があるのかもしれません。)

create文からのscalaファイル作成

create文からSQLファイルを作る場合、ドライバはH2Driverにします。
参照されるcreate文はBuild.scalaで指定したsqlファイルです。

ハマったポイント
そのまま "show create table" で出力したcreate文ではうまく行きません。
例)int(12) などの (12) があると、動かない。

動かしてみる

そして以下コマンドより、動かすことができます。

% sbt // rootディレクトリで
> compile // Daoを作るだけなら
> run // 実際にExample.scalaのselectを走らせる場合

compileすると、

target/scala2.11/src_managed/slick/demo2/Tables.scala

に作成されます。


moc-yuto/slick-codegen-example · GitHub

HListにも対応しているので、tuple22問題にも悩まされずに、DBのカラムが多いテーブルのDaoも簡単に作れます。