什么<>操作员在Slick做什么?

时间:2016-03-07 09:54:41

标签: scala slick

我正在浏览Slick的文档,以设置一个快速工作的原型。我正在经历this link

在Mapped Tables部分中,我在上述示例中看到了<>运算符,但无法在任何地方找到任何文档。需要帮助来理解这一点。

3 个答案:

答案 0 :(得分:21)

<>运算符定义了RowTable中的case class之间的关系。

case class User(id: Option[Int], first: String, last: String)

ROW            |id             | first        | last        |

因此,首先将数据作为n-tuple <>的左侧从Tabel中取出,然后转换为case class<>的右侧)

要使案例类工作转换,需要两种方法:

Rown-tuplecase class

scala> User.tupled
res6: ((Option[Int], String, String)) => User = <function1>

因此,当给定三User作为参数时,此函数可以创建(Option[Int], String, String)

要在DB中写入

case classn-tuple

scala> User.unapply _
res7: User => Option[(Option[Int], String, String)] = <function1>

此功能以相反的方式提供功能。给定用户它可以提取三元组。此模式称为Extractor。在这里,您可以了解更多相关信息:http://www.scala-lang.org/old/node/112

答案 1 :(得分:3)

它不是scala运算符,它是由slick的ShapedValue

定义的方法

正如您在链接的文档中所看到的,它用于在提供两种方法的案例类中映射投影

 def * = (id.?, first, last) <> (User.tupled, User.unapply)

答案 2 :(得分:1)

如果您clone the Slick source repo和grep代表def <>,您会发现<>ShapedValue的方法,返回MappedProjection