2014-01-25 164 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,這是固定的。只需將用戶名和密碼作爲字符串添加到陣列末尾

相關問題