Screaming Loud

研究・プログラミングなど気づいたことをメモをしています。読書記録はこちらに記載しています。https://bookmeter.com/users/75944

slickのcase classをつくるのがめんどくさかったので、スクリプトで作った

slickのcase classをつくるのがめんどかったので、SQLを投げればcase classとTableを生成するスクリプト作りました。
(すでにslick-code-generatorとかある。車輪の再発明。。)
Schema code generation — Slick 2.0.0-RC1 documentation


作った経緯として、なんかslick-code-genが動かなくなって、原因追求の時間がなかったからさくっと作った感じです。

github.com

後悔はしていない。


実際、こんなcreate SQL文を投げると、

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  `create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_name` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1851 DEFAULT CHARSET=utf8;
case class usersDto(
  id: Int ,
  name: String ,
  email: String ,
  password: String ,
  createDate: DateTime ,
  lastName: String
)
class usersTable(tag: Tag) extends Table[usersDto](tag, "users") {
  def id: Column[Int] = column[Int]("id")
  def name: Column[String] = column[String]("name")
  def email: Column[String] = column[String]("email")
  def password: Column[String] = column[String]("password")
  def createDate: Column[DateTime] = column[DateTime]("create_date")
  def lastName: Column[String] = column[String]("last_name")
def * = (id,name,email,password,create_date,last_name)<>(usersDto.tuppled, usersDto.unapply)
}

こんなアウトプットになります。