Scala 如何思维圆滑?

Scala 如何思维圆滑?,scala,slick,slick-3.0,Scala,Slick,Slick 3.0,我在Slick中有点挣扎,我是Scala/Slick的最新采用者。我习惯于休眠和/或Rails ActiveRecord,但我在加入大量表时有点困难 我有以下的课堂模式 case class User(id: UUID, ..., profile: UserProfile) case class UserProfile(id: UUID, ..., address: Address) case class Address(id: UUID, ...) 我试图将其作为一个域模型,让持久性层只获取

我在Slick中有点挣扎,我是Scala/Slick的最新采用者。我习惯于休眠和/或Rails ActiveRecord,但我在加入大量表时有点困难

我有以下的课堂模式

case class User(id: UUID, ..., profile: UserProfile)
case class UserProfile(id: UUID, ..., address: Address)
case class Address(id: UUID, ...)
我试图将其作为一个域模型,让持久性层只获取并连接表以返回一个域单个对象

  • 用滑头做这件事是正确的方法吗
  • 是否存在缓存查询结果而不是不断查询数据库的方法
  • 这有用吗
  • 例如,连接这三个表的最佳方式是什么?1通过单独的DAO或内部联接查询它们,并使用Scala的groupBy

  • 抱歉,如果这是一个“新手”问题。我只是想弄清楚如何“思维圆滑”。

    不久前我写了一篇关于play+Slick的小教程。检查一下,看看是否有帮助

    我通常有:

    case class CaseClassA(field1, field2, caseClassB_Id)
    case class CaseClassB(field3, field4)
    
    但也许有更好的方法

  • 做这件事没有正确的方法。这取决于你需要对你的模型做什么。。。有一种正确的建模关系数据库模型的方法,但您已经知道了这一点
  • Slick不使用任何缓存,请参阅。但如果您使用Play框架,它提供了,但我没有这方面的经验或建议。但是,对于查询,可以使用一些“缓存”,如
  • 可能是的,对于简单的案例、简单的表等,但您也可以使用Hibernate,它更古老、更可靠
  • 当我还是Scala/Slick的初学者时,我也被它困住了,所以我写了一篇关于它的文章(它也在Slick上,是的,我在吹牛:p)。还有一个简单的配套项目
  • 理解普通SQL、它的连接等在使用Slick时会有很大帮助。
    例如,外部连接(左/右)顺序是否重要,以及其他有趣的问题。

    问题是,我不想在我的域类中有Id。我尝试使用Hibernate样式是的,但Hibernate是一种ORM,而“Slick是Scala的现代数据库查询和访问库”。。尽管如此,如果有人能建议一种更好的方法来引用光滑案例类中的其他域类,我很乐意知道。知道了。还有一件事。加入这些表的最佳方式是什么。多个查询,或加入表和内存中的groupBy?我试图实现的目标是在我开发的所有应用程序中实现这一点,我有一个域层,使我的业务/域模型不受影响,其中我有DAO或Repo接口,这些接口由数据访问层实现,将与数据库交互,这不应该是一个问题,您只需将DAO注入您的服务(业务/域层)。但这是另一个不太重视Slick本身的问题。此外,如果您有在文件中分隔的Slick表,您可以使用Scala的self类型从DAO注入驱动程序,然后您可以简单地切换(例如从MySQL切换到H2),就像在这个playsick中一样。