按照此页面中的说明操作:http://slick.typesafe.com/doc/2.0.0/code-generation.html
我们看到生成mysql表的模型需要类似以下代码段的东西
val url = "jdbc:mysql://127.0.0.1/SOME_DB_SCHEMA?characterEncoding=UTF-8&useUnicode=true"
val slickDriver = "scala.slick.driver.MySQLDriver"
val jdbcDriver = "com.mysql.jdbc.Driver"
val outputFolder = "/some/path"
val pkg = "com.pligor.server"
scala.slick.model.codegen.SourceCodeGenerator.main(
Array(slickDriver, jdbcDriver, url, outputFolder, pkg)
)
这些参数对于H2数据库来说足够了,因为链接中的示例有它。
如何包含MySQL数据库的用户名和密码?
答案 0 :(得分:5)
从互联网上的几个链接中,根据cvogt的答案,这是你需要做的最低限度。
请注意,这是sbt的一般解决方案。如果您正在处理Play框架,您可能会发现使用相关插件
执行此任务会更容易首先,您需要一个新的sbt项目,因为需要引用所有库依赖项才能使光源生成器运行。
使用本教程创建新的sbt项目:http://scalatutorials.com/beginner/2013/07/18/getting-started-with-sbt/
最好使用方法使用giter8进行设置
如果它恰好与Intellij一起使用,那么您需要创建文件project/plugins.sbt
并在此行中插入:addSbtPlugin("com.hanhuy.sbt" % "sbt-idea" % "1.6.0")
。
在sbt中执行gen-idea
以生成intellij项目。
使用giter8,您可以在项目文件夹中获得自动生成的文件ProjectNameBuild.scala。打开它并至少包含这些库依赖项:
libraryDependencies ++= List(
"mysql" % "mysql-connector-java" % "5.1.27",
"com.typesafe.slick" %% "slick" % "2.0.0",
"org.slf4j" % "slf4j-nop" % "1.6.4",
"org.scala-lang" % "scala-reflect" % scala_version
)
其中scala版本是变量private val scala_version = "2.10.3"
现在创建看起来像这样的自定义源代码生成器:
import scala.slick.model.codegen.SourceCodeGenerator
object CustomSourceCodeGenerator {
import scala.slick.driver.JdbcProfile
import scala.reflect.runtime.currentMirror
def execute(url: String,
jdbcDriver: String,
user: String,
password: String,
slickDriver: String,
outputFolder: String,
pkg: String) = {
val driver: JdbcProfile = currentMirror.reflectModule(
currentMirror.staticModule(slickDriver)
).instance.asInstanceOf[JdbcProfile]
driver.simple.Database.forURL(
url,
driver = jdbcDriver,
user = user,
password = password
).withSession {
implicit session =>
new SourceCodeGenerator(driver.createModel).writeToFile(slickDriver, outputFolder, pkg)
}
}
}
最后,您需要在主项目对象中调用此execute
方法。找到由giter8自动生成的文件ProjectName.scala
在其中你会发现println
调用,因为这只是一个“hello world”应用程序。高于println
会调用类似的内容:
CustomSourceCodeGenerator.execute(
url = "jdbc:mysql://127.0.0.1/SOME_DB_SCHEMA?characterEncoding=UTF-8&useUnicode=true",
slickDriver = "scala.slick.driver.MySQLDriver",
jdbcDriver = "com.mysql.jdbc.Driver",
outputFolder = "/some/path",
pkg = "com.pligor.server",
user = "root",
password = "xxxxxyourpasswordxxxxx"
)
这样每次执行sbt run
时,您都会自动生成Slick所需的Table类
答案 1 :(得分:2)
请注意,至少对于2.0.1,这是固定的。只需将用户名和密码添加到数组的末尾作为字符串
答案 2 :(得分:0)
这已在此处提出并回答:https://groups.google.com/forum/#!msg/scalaquery/UcS4_wyrJq0/obLHheIWIXEJ。目前,您需要自定义代码生成器。 2.0.1的PR在队列中。
答案 3 :(得分:0)
我的解决方案几乎与乔治的答案相同,但无论如何我都会添加我的解决方案。这是我用来在SBT项目中为我的mysql数据库生成代码的整个文件。
<强> SlickAutoGen.scala 强>
package mypackage
import slick.model.codegen.SourceCodeGenerator
object CodeGen {
def main(args: Array[String]) {
SourceCodeGenerator.main(
Array(
"scala.slick.driver.MySQLDriver",
"com.mysql.jdbc.Driver",
"jdbc:mysql://localhost:3306/mydb",
"src/main/scala/",
"mypackage",
"root",
"" // I don't use a password on localhost
)
)
}
}
<强> build.sbt 强>
// build.sbt --- Scala build tool settings
libraryDependencies ++= List(
"com.typesafe.slick" %% "slick" % "2.0.1",
"mysql" % "mysql-connector-java" % "5.1.24",
...
)
要使用此功能,只需修改设置,保存在项目根目录中并按如下方式运行:
$ sbt
> runMain mypackage.CodeGen