2014-01-25 225 views
7

继此页面方向:http://slick.typesafe.com/doc/2.0.0/code-generation.html
我们看到类似下面的代码段需要生成模型MySQL表如何使用Slick的源代码生成器设置用户名和密码?

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) 
) 

这些parameteres是足够的H2数据库的例子链接有它。

如何为MySQL数据库添加用户名和密码?

回答

4

从互联网中发现的几个链接,也基于cvogt的答案,这是你需要做的最低限度。

请注意,这是sbt的一般解决方案。如果您正在处理播放框架,您可能会发现使用相关插件执行此任务更容易

首先,您需要一个新的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 
) 

其中阶版本是变量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你会产生由油滑所需的表类自动

0

我的解决办法是几乎相同乔治的答案,但我无论如何,我会加我的。这是我用来在SBT项目中为我的mysql数据库生成代码的整个文件。

SlickAutoGen。斯卡拉

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 
2

注意,至少对于2.0.1,这是固定的。只需将用户名和密码作为字符串添加到阵列末尾

相关问题