scala – 使用play-slick 1.0在play 2.4中创建表
发布时间:2020-12-16 18:39:20 所属栏目:安全 来源:网络整理
导读:我启动并运行了play-slick模块,并且还使用了evolution,以便在应用程序启动期间在数据库中创建所需的表. 为了使进化工作,需要编写一个1.sql脚本,其中包含我想要创建的表定义.目前它看起来像这样: # --- !UpsCREATE TABLE Users ( id UUID NOT NULL,email var
我启动并运行了play-slick模块,并且还使用了evolution,以便在应用程序启动期间在数据库中创建所需的表.
为了使进化工作,需要编写一个1.sql脚本,其中包含我想要创建的表定义.目前它看起来像这样: # --- !Ups CREATE TABLE Users ( id UUID NOT NULL,email varchar(255) NOT NULL,password varchar(255) NOT NULL,firstname varchar(255),lastname varchar(255),username varchar(255),age varchar(255),PRIMARY KEY (id) ); # --- !Downs DROP TABLE Users; 到目前为止这么好但是为了使Slick正常工作,它还需要知道我的表的定义.所以我有一个UserDAO对象,如下所示: class UserDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] { import driver.api._ private val Users = TableQuery[UsersTable] def all(): Future[Seq[User]] = db.run(Users.result) def insert(user: User): Future[User] = db.run(Users += user).map { _ => user } //Table definition private class UsersTable(tag:Tag) extends Table[User](tag,"users"){ def id = column[UUID]("id",O.PrimaryKey) def email = column[String]("email") def password = column[String]("password") def firstname = column[Option[String]]("firstname") def lastname = column[Option[String]]("lastname") def username = column[Option[String]]("username") def age = column[Int]("age") def * = (id,email,password,firstname,lastname,username,age) <> ((User.apply _).tupled,User.unapply) } } 我现在基本上在两个不同的地方有相同的表定义.一次进入1.sql脚本,一次进入UserDAO类. 我真的不喜欢这个设计!在两个不同的地方拥有相同的表定义似乎并不正确. 有没有办法从UserDAO类中的表定义生成进化脚本?或者是否有一种完全不同的方式在启动期间生成表定义(可能只使用光滑)?我真的只想使用光滑的表定义并摆脱恼人的SQL脚本. 我正在使用play-2.4和play-slick-1.0 非常感谢. 解决方法
很棒的问题 – 我和你在同一条船上!
我只有DAO和这段代码: TableQuery[UsersTable].schema.create 这将为您创建数据库表.不需要.sql. 相应地,要删除,请使用.drop而不是.create. 您还可以使用reduceLeft组合多个表的表创建.我是这样做的: lazy val allTables = Array( TableQuery[AcceptanceTable].schema,[... many more ...] TableQuery[UserTable].schema ).reduceLeft(_ ++ _) /** Create all tables in database */ def create = { allTables.create } /** Delete all tables in database */ def drop = { allTables.drop } 所有这些都需要范围内的驱动程序API,例如: val profile = slick.driver.H2Driver import profile.api._ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |