加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala Slick和我的数据库中的复杂类型

发布时间:2020-12-16 19:13:16 所属栏目:安全 来源:网络整理
导读:我对 Scala和Slick都很陌生,在尝试学习它时,我正在编写一个适用于简单数据库的小应用程序. 我以前的大多数经验来自.Net和实体框架,所以我想知道是否在Entity Framework中使用ComplexType属性,如果Slick允许我这样做. 基本上我的一个表是1-1关系,对于其中一些
我对 Scala和Slick都很陌生,在尝试学习它时,我正在编写一个适用于简单数据库的小应用程序.

我以前的大多数经验来自.Net和实体框架,所以我想知道是否在Entity Framework中使用ComplexType属性,如果Slick允许我这样做.

基本上我的一个表是1-1关系,对于其中一些我更喜欢创建一个对象并将其用作复杂类型.显然在数据库中这只是表上的额外列,但我想知道Slick是否可以将这些列映射到Table类中的对象.见下面的例子.

我将使用博客条目示例.

扩展Table的主要类是BlogEntry,它包含条目的文本.然后说我想在那个类中另一个名为EntryDetails的类,它包含条目发布的时间和上次更新的时间.

在数据库中,所有这些字段都在同一个表中,但在读入时,它将是一个包含另一个对象的对象. Slick有可能吗?

解决方法

我认为这解决了你的问题

trait Mapping {
  //Need to change JdbcDriver to the driver that you will use in your code (MySql,Postgres,etc)

  import scala.slick.driver.JdbcDriver.profile.simple._

  // Models
  case class EntryDetails(createDate: Option[DateTime] = None,updateDate: Option[DateTime] = None)

  case class Entry(id: Int,text: String,details: EntryDetails)

  //Implicit Joda Mappers for datetime columns
  implicit def timestamp2dateTime = MappedColumnType.base[DateTime,Timestamp](
    dateTime => new Timestamp(dateTime.getMillis),date => new DateTime(date))

  //Table mapping
  class Entries(tag: Tag) extends Table[Entry](tag,"entry") {
    def entryDetails = (createDate,updateDate) <>(EntryDetails.tupled,EntryDetails.unapply)

    def * = (id,text,entryDetails) <>(Entry.tupled,Entry.unapply)

    val id: Column[Int] = column[Int]("id")
    val text: Column[String] = column[String]("text")
    val createDate: Column[Option[DateTime]] = column[Option[DateTime]]("createDate")
    val updateDate: Column[Option[DateTime]] = column[Option[DateTime]]("updateDate")
  }

  //Table query,used in slick 2.0 for querying a table
  lazy val EntryTableQuery = TableQuery[Entries]
}

我将所有内容都包含在特征映射中,以便为您的答案打包代码.据我所知,您希望将表映射到两个对象,一个在另一个内,这可以通过创建另一个映射方法(此处称为entryDetails)来实现,该方法将表查询映射到EntryDetails模型对象.然后,您可以将此映射方法添加到对象映射*方法中. entryDetails方法只是该映射方法的另一个参数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读