这基本上是earlier question的重复,但是对于Slick-2,因为v.1的答案不再有效。
简而言之,精巧的文档建议这样做
package models
import scala.slick.driver.H2Driver.simple._
class Pictures(tag: Tag) extends Table[(Int, String, String)](tag, "Pictures") {
def id = column[Int]("id", O.PrimaryKey)
def urlThumb = column[String]("urlThumb", O.NotNull)
def urlLarge = column[String]("urlLarge", O.NotNull)
def * = (id, urlThumb, urlLarge)
}这是将代码直接绑定到H2Driver。我希望它是与驱动无关的,即与任何JdbcProfile驱动程序一起工作。我找到的唯一方法就是将驱动程序传递给DAO类。
class SlickDAO(val driver: JdbcProfile) {
import driver.simple._问题是,如果我想用共享行为来定义一些特征,例如CRUDSupport,我不能对该特性进行参数化,我只能做一个抽象类。因此,我很好奇,推荐的用Slick-2编写DAL的方法是什么?我确信这是Cake模式,但我在Scala中还不够先进,无法实现它。
发布于 2014-02-17 07:00:17
我不太清楚斯利克的具体情况,但是有一些标准的Scala方法可以解决这个问题。
我不能对这个特性进行争论,我只能做一个抽象的类
但你可以
trait SlickDAO {
val driver: JdbcProfile
import driver.simple._
...
}以及以后的
class SlickDAOImpl(val driver: JdbcProfile) extends SlickDAO或
new SlickDAO {
val driver = ...
}但是,在特征中使用抽象val可能会导致初始化顺序出现问题,因此我更倾向于
trait SlickDAO {
// can still be implemented as a val
def driver: JdbcProfile
// can't import driver.simple._, you'll have to write the prefix explicitly
...
}或
trait SlickDAO {
def getDriver: JdbcProfile
lazy val driver = getDriver
import driver.simple._
...
}发布于 2014-02-17 16:59:13
看看:http://knoldus.wordpress.com/?p=5228&preview=true和:https://github.com/satendrakumar06/slickformultipledatabases,这可能会有帮助。
https://stackoverflow.com/questions/21819018
复制相似问题