Slick

Tablas

Se definen objetos Table asociados a las tablas de la base de datos. No se debe añadir estado dentro de estos objetos. Se pueden definir métodos . No se deben definir en una localización static, por ejemplo dentro de otros objetos.

Las columnas se definen con def , no con val . Se usa el método column . Cada columna tiene un tipo Scala
Dos tablas que se usarán en diversos ejemplos Definiciones de columnas con varios tipos y opciones
  object Projects extends Table[Project]("project") {

  implicit val javaUtilDateTypeMapper = MappedTypeMapper.base[java.util.Date, java.sql.Date](
    x => new java.sql.Date(x.getTime),
    x => new java.util.Date(x.getTime)
  )
  
  def id = column[Option[Int]]("id", O.PrimaryKey, O.AutoInc)
  
  def createTime = column[Date]("createTime", O.NotNull)
  def autoInc = * returning id

  def * = id ~ title ~ content ~ author~ teamId ~ createTime <> (Project.apply _, Project.unapply _)
}

object ProjectUserRel extends Table[(Option[Int],Option[Int])]("projectUserRel") {
  def projectId = column[Option[Int]]("projectId")
  def userId = column[Option[Int]]("userId")
  def * = projectId ~ userId
  def projectFK = foreignKey("project_fk", projectId, Projects)(a => a.id)
  def userFK = foreignKey("user_fk", userId, Users)(b => b.id)
}

Las tablas requieren un método * conteniendo la proyección por defecto. Esta proyección describe el resultado obtenido cuando se obtienen filas a partir de una consulta. La proyección puede añadir nuevas columnas, con valores calculados, u omitir otros.

La tabla Project está mapeada a un tipo propio. Se añade en la proyección un mapping bidireccional con el operador <>

No hay comentarios:

Publicar un comentario