我花了大约2个小时或更长的时间来完成这项工作。我尝试了不同的进口(你可以在评论中看到)和不同版本的光滑,但它仍然不起作用。这是我的build.sbt:
name := """Scala_project"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.11.8"
libraryDependencies += jdbc
libraryDependencies += cache
libraryDependencies += ws
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "1.5.1" % Test
libraryDependencies += "org.postgresql" % "postgresql" % "9.3-1100-jdbc4"
libraryDependencies += "com.typesafe.slick" %% "slick" % "3.0.0"
libraryDependencies += "org.slf4j" % "slf4j-nop" % "1.6.4"
我的表定义类:
package database;
//import scala.slick.driver.postgresdriver.simple._
import scala.concurrent.ExecutionContext.Implicits.global
import slick.driver.postgresdriver.api._
//import slick.backend.DatabaseConfig
import slick.driver.JdbcProfile
import models._
class EmployeesTableDef(tag: Tag) extends Table[Employee](tag, "employee_data") {
/* val dbConfig = DatabaseConfig.forConfig[JdbcProfile]("employee")
import dbConfig.driver.api._ */
def id = column[Long]("id", O.PrimaryKey,O.AutoInc)
def name = column[String]("name")
def resume = column[String]("resume")
def additionalInformation = column[String]("additionalInformation")
override def * =
(id, name, resume, additionalInformation) <>(Employee.tupled, Employee.unapply)
}
以上示例给出错误:
object postgresdriver is not a member of package slick.driver
因为我无法找到有效的导入我尝试使用dbConfig值,但是代码让我使用了类中的导入(不是因为它),所以程序仍然没有看到Table类型
拜托,我将非常感谢你的帮助。
答案 0 :(得分:1)
注意:您可以找到使用以下策略的工作示例项目here
不要直接使用光滑作为依赖。使用play-slick这是一个光滑的插件。
trait EmployeeRepoHelper {
self: HasDatabaseConfigProvider[JdbcProfile] =>
import driver.api._
lazy protected val employeeTableQuery = TableQuery[EmployeesTableDef]
class EmployeesTableDef(tag: Tag) extends Table[Employee](tag, "employee_data") {
def id = column[Long]("id", O.PrimaryKey,O.AutoInc)
def name = column[String]("name")
def resume = column[String]("resume")
def additionalInformation = column[String]("additionalInformation")
override def * =
(id, name, resume, additionalInformation) <>(Employee.tupled, Employee.unapply)
}
}
您不应该直接导入postgres驱动程序。这将引入对postgres的硬依赖,因此你的应用程序只适用于postgres,你不能在开发/测试模式下使用说H2。要使用的适当光滑驱动程序应该是依赖注入,以避免对postgres光滑驱动程序的这种硬依赖。以下示例显示了实现。
class EmployeeRepository @Inject() (protected val dbConfigProvider: DatabaseConfigProvider)
extends EmployeeRepoHelper
with HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
def insert(employee: Employee) = db.run{
employeeTableQuery += employee
}
/*
Other methods for database interaction
*/
}
具有上述定义。 EmployeeRepository类将提供与数据库交互的接口,如下所示。下面我使用Guice DI框架的JIT绑定,它注入了dbConfigProvider属性。因为EmployeeRepository通过依赖注入来获取构造函数参数,所以确保你永远不会自己实例化类,但是你总是将它注入到其他类中。
slick.dbs.default.driver="slick.driver.H2Driver$"
slick.dbs.default.db.driver="org.h2.Driver"
slick.dbs.default.db.url="jdbc:h2:mem:play;MODE=MYSQL;DB_CLOSE_DELAY=-1"
slick.dbs.default.db.user=sa
slick.dbs.default.db.password=""
最后你的application.conf应该是数据库的连接信息。 以下示例使用H2数据库连接详细信息。
CUSTOM_ELEMENTS_SCHEMA