evolution 会自动创建数据库和 table 吗?

Does evolution create automatically database and table?

我有 class 组表,它构成了 table 的模式。

如我所见,在其他项目中有 conf/evolution/default 文件夹文件 1.sql,它是从代码自动生成的(正如我假设的那样)。

但是当我启动我的应用程序时 - 什么都没有创建。

我该怎么办?它是自动创建的还是我在代码中编写的?

 class GroupTable(tag: Tag) extends Table[Group](tag, "groups") {
    def name = column[String]("name", O.PrimaryKey)

    def day = column[String]("day")

    def subject = column[String]("subject")

    def typeSub = column[String]("typeSub")

    def start = column[Time]("start")

    def end = column[Time]("end")

    def teacher = column[String]("teacher")

    def auditorium = column[Int]("auditorium")

    override def * = (name, day, subject, typeSub, start, end, teacher, auditorium) <>((Group.apply _).tupled, Group.unapply)
  }

application.conf:

slick.dbs.default.driver = "slick.driver.MySQLDriver$"
slick.dbs.default.db.driver="com.mysql.jdbc.Driver"
slick.dbs.default.db.url="jdbc:mysql://localhost:3306/testdb"
slick.dbsdefault.user="root"
slick.dbs.default.password=""

play.evolutions.autoApply=true

evolutionplugin=enabled
play.evolutions.db.default.autoApply=true
play.evolutions.db.default.autoApplyDowns=true

built.sbt:

name := "TimetableAPI"

version := "1.0"

lazy val `timetableapi` = (project in file(".")).enablePlugins(PlayScala)

scalaVersion := "2.11.7"

libraryDependencies ++= Seq(cache, ws, specs2 % Test, evolutions,
  "mysql" % "mysql-connector-java" % "5.1.34",
  "com.typesafe.play" %% "play-slick" % "1.1.0",
  "com.typesafe.play" %% "play-slick-evolutions" % "1.1.0")

unmanagedResourceDirectories in Test <+= baseDirectory(_ / "target/web/public/test")

resolvers += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases"

routesGenerator := InjectedRoutesGenerator

我不知道 scalaz,但一般来说,进化不是自动创建的,它们是手动编写的。每次对数据库进行更改时,都会写入下一个编号为 sql 的文件,以应用更改 (Ups) 和删除更改 (Downs)。

您可以使用数据库工具(例如MySql Workbenches 数据库同步功能)在模型和实际数据库之间生成"difference"。这些脚本可以帮助编写演进。

更多文档 here

我在 Play 框架中尝试了进化。

关于您的问题,“evolution 是否会自动创建数据库并且table?

由于您正在使用 mysql,

1.) 不,进化不会为你创造数据基础。您需要创建 "testdb" 数据库并将权限授予 "root"

2.) 是的,进化为你创造数据table

为什么不使用H2作为测试的数据库引擎呢? evolution将从头开始为您创建数据库和数据table(无需创建数据库)。您也可以使用 H2 数据库引擎模仿 mysql:

db.default.url="jdbc:h2:mem:play;MODE=MYSQL"

请参阅link: https://www.playframework.com/documentation/2.5.x/Developing-with-the-H2-Database