Scal Slick Local DateTimeとTimestampの変換

1272 ワード

Slickを使ってデータベースを操作する場合、LocalDateTimeタイプフィールドを使用すると、データベースではvarharタイプを使用しますが、より厳格な時間タイプのTimestampを使用する必要があります.これはこの二つのタイプの間を行ったり来たりする必要があります.
使い方
  • 導入パッケージ
  • 
      com.typesafe.slick
      slick_2.11
      3.3.2
    
    
  • Table構成
  • import java.sql.Timestamp
    import java.time.LocalDateTime
    
    import slick.jdbc.MySQLProfile.api._
    import slick.lifted.ProvenShape
    
    case class TableInfo(
                          offsetName: String,
                          offsetTime: LocalDateTime
                        )
    
    
    class OffsetTable(tag: Tag) extends Table[TableInfo](tag, "offset-table") {
    
      private val localDateTime2timestamp: BaseColumnType[LocalDateTime] =
        MappedColumnType.base[LocalDateTime, Timestamp](
          { instant => Timestamp.valueOf(instant)
          }, { timestamp => timestamp.toLocalDateTime
          }
        )
    
      override def * : ProvenShape[TableInfo] =
        (
          offsetName,
          offsetTime
          ).mapTo[TableInfo]
    
      def offsetName: Rep[String] = column[String]("offsetName", O.Length(200))
    
      def offsetTime: Rep[LocalDateTime] = column[LocalDateTime]("offsetTime", O.Length(23))(localDateTime2timestamp)
    
    }