【发布时间】:2015-12-02 20:27:31
【问题描述】:
在学习 play-slick 并设置最终保存到 PostgreSQL 的模型类时,我看到了这种模式(代码如下)。有一个简单的案例类充当模型,然后是扩展 Table 的东西来处理关系映射。
case class Cat(name: String, color: String)
/* Table mapping
*/
class CatsTable(tag: Tag) extends Table[Cat](tag, "CAT") {
def name = column[String]("name", O.PrimaryKey)
def color = column[String]("color", O.NotNull)
def * = (name, color) <> (Cat.tupled, Cat.unapply _)
}
在许多常见情况下,这让我觉得是一堆不必要的样板,但我只是在学习,所以我不知道我在这里缺少什么。有没有更简单的方法从case class Cat 开始并最终得到一个我可以用于数据库中Cat CRUD 实例的对象?例如。似乎没有必要指定String 类型的属性最终应该是column[String],等等。在其他框架中,我可能必须添加注释或其他内容来指示我想成为主键或不可为空,但我不会真正编写单独的映射。通过手写这些映射,我主要是花费更多时间,并有机会以微妙的方式将其搞砸,以应对原本简单的情况。
我最理想的做法是从case class Cat 开始,在上面撒上魔法框架的灰尘,然后得到一个具有合理默认值的CatsTable,我可以根据需要覆盖/自定义。
当我搜索这方面的文档时,我通常会回到schema code generation,但这似乎倒退了;我不想从现有/填充的 RDBMS 生成表映射,我想从头开始。
【问题讨论】:
-
有点晚了,但另一个库是
http://getquill.io/,它比 Slick 需要更少的样板,并且还提供了 jdbc 或真正异步 db 调用的选择。截至 2017 年 6 月,它感觉不太完善 - 例如,我目前正在使用 Slick 和 Quill 的组合,因为我无法让后者调用存储过程。
标签: scala playframework slick