简体   繁体   English

光滑的MappedColumnType

[英]Slick MappedColumnType

I would like to add a case class SupplierID to my code. 我想在我的代码中添加一个案例类SupplierID。 And I would like to simplify the * method by auto-Mapping SupplierID and Int Types. 我想通过自动映射SupplierID和Int类型来简化*方法。

  case class SupplierID(id: Int)

  case class Supplier(id: SupplierID, name: String, street: String, city: String, state: String, zip: String)
  // Definition of the SUPPLIERS table using case class
  class Suppliers(tag: Tag)  extends Table[Supplier](tag, "SUPPLIERS") {
    def id = column[Int]("SUP_ID", O.PrimaryKey) // This is the primary key column
    def name = column[String]("SUP_NAME")
    def street = column[String]("STREET")
    def city = column[String]("CITY")
    def state = column[String]("STATE")
    def zip = column[String]("ZIP")

    def * ={
      (id, name, street, city, state, zip).shaped.<>({ tuple => Supplier.apply(SupplierID(tuple._1), tuple._2, tuple._3, tuple._4, tuple._5, tuple._6 )}, {
        (s : Supplier) => Some{(s.id.id, s.name, s.street, s.city, s.state, s.zip)}
      })
    }

  }

I'm trying to implement a column Type like this 我正在尝试实现这样的列类型

 // And a ColumnType that maps it to Int
  implicit val SupplierIDColumnType = MappedColumnType.base[SupplierID, Int](
     s => s.id,    // map Bool to Int
     i => SupplierID(i) // map Int to Bool
  )

How to use such mappingtype ? 如何使用这样的mappingtype?

The solution: 解决方案:

case class SupplierID(id: Int)

  // And a ColumnType that maps it to Int
  implicit val SupplierIDColumnType = MappedColumnType.base[SupplierID, Int](
     s => s.id,    // map SupplierID to Int
     i => SupplierID(i) // map Int to SupplierID
  )

  case class Supplier(id: SupplierID, name: String, street: String, city: String, state: String, zip: String)
  // Definition of the SUPPLIERS table using case class
  class Suppliers(tag: Tag)  extends Table[Supplier](tag, "SUPPLIERS") {
    def id = column[SupplierID]("SUP_ID", O.PrimaryKey) // This is the primary key column
    def name = column[String]("SUP_NAME")


       def street = column[String]("STREET")
        def city = column[String]("CITY")
        def state = column[String]("STATE")
        def zip = column[String]("ZIP")

        def * = (id, name, street, city, state, zip) <>(Supplier.tupled , Supplier.unapply _)

  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM