【问题标题】:How to setup username and password with Slick's source code generator?如何使用 Slick 的源代码生成器设置用户名和密码?
【发布时间】:2014-01-25 11:15:20
【问题描述】:

按照此页面中的说明进行操作: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 数据库的用户名和密码?

【问题讨论】:

    标签: mysql slick


    【解决方案1】:

    根据互联网上的几个链接以及 cvogt 的回答,这是您需要做的最低要求。

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

    首先,您需要一个新的 sbt 项目,因为需要引用所有库依赖项才能运行 slick 源代码生成器。
    使用本教程创建新的 sbt 项目:http://scalatutorials.com/beginner/2013/07/18/getting-started-with-sbt/
    最好使用方法Setup using 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类

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        已在此处询问和回答:https://groups.google.com/forum/#!msg/scalaquery/UcS4_wyrJq0/obLHheIWIXEJ。目前您需要自定义代码生成器。 2.0.1 的 PR 正在等待中。

        【讨论】:

          【解决方案4】:

          我的解决方案与乔治的答案几乎相同,但我还是会添加我的。这是我在 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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-04-14
            • 1970-01-01
            • 2017-01-20
            • 2012-03-14
            • 2021-11-29
            • 1970-01-01
            • 2013-10-20
            • 1970-01-01
            相关资源
            最近更新 更多