如何在Scala Slick中使用枚举? [英] How to use Enums in Scala Slick?

查看:149
本文介绍了如何在Scala Slick中使用枚举?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我发现这个但是没有问题如何使用它



https:// github .com / nafg / slick-additions / blob / master / src / main / scala / scala / slick / added / Enum.scala



我应该使用枚举包含3个值定义对象,例如:



mysql列INT(3),其中包含3个值:将它们命名为a,b,c。

$ b $我解决了枚举的问题,以下列方式(以你的价值为例):



b 解决方案

pre> import play.api.db.slick.DB
import play.api.db.slick.Config.driver.simple._


密封特征MyEnum
案例对象MyEnumA扩展MyEnum
案例对象MyEnumB扩展MyEnum
案例对象MyEnumC扩展MyEnum

对象MyEnumMapper {
val string_enum_mapping :Map [String,MyEnum] =地图(
a - > MyEnumA,
b - > MyEnumB,
c - > MyEnumC

val enum_string_mapping:Map [MyEnum,String] = string_enum_mapping.map(_。swap)
implicit val myEnumStringMapper = MappedTypeMapper.base [MyEnum,String](
e = > enum_string_mapping(e),
s => string_enum_mapping(s)

}

import MyEnumMapper._

案例类MyData(
......
enumValue:MyEnum,
.....


........ ........

对象MyDataTable扩展表[MyData](< table_name>){
...
def enumValue =列[MyEnum](< field_name>)
.....

.... / *无论你想要什么提升或直接光滑的电话* /

}



如果适用于Play 2.1和Play 2.2 ,Slick 1.0.0和MariaDB 5.5(与MySQL相同)


Want to map MySQL INT bitmask to Slick.

I've found this but have little problem how to use it

https://github.com/nafg/slick-additions/blob/master/src/main/scala/scala/slick/additions/Enum.scala

Any help how should I define object for i.e.

mysql column INT(3) with Enum containing 3 values: lets name them a,b,c here.

解决方案

I solved the problem with Enums in the following way (taking your values for an example):

import play.api.db.slick.DB
import play.api.db.slick.Config.driver.simple._


sealed trait MyEnum
case object MyEnumA extends MyEnum
case object MyEnumB extends MyEnum
case object MyEnumC extends MyEnum

object MyEnumMapper {
  val string_enum_mapping:Map[String,MyEnum] = Map(
     "a" -> MyEnumA,
     "b" -> MyEnumB,
     "c" -> MyEnumC
  )
  val enum_string_mapping:Map[MyEnum,String] = string_enum_mapping.map(_.swap)
  implicit val myEnumStringMapper = MappedTypeMapper.base[MyEnum,String](
    e => enum_string_mapping(e),
    s => string_enum_mapping(s)
  )
}

import MyEnumMapper._

case class MyData(
 ......
 enumValue: MyEnum,
 .....
)

................

object MyDataTable extends Table[MyData]("<table_name>") {
......
def enumValue = column[MyEnum]("<field_name>")
.....

.... /* whatever lifted or direct slick calls you want */ 

}

If works for me in both Play 2.1 and Play 2.2, Slick 1.0.0 and MariaDB 5.5 (same as MySQL)

这篇关于如何在Scala Slick中使用枚举?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆