Slickのドキュメント を歩いて、迅速に動作するプロトタイプをセットアップしました。
マップされたテーブルのセクションで、前述の例に<>
演算子が表示されていますが、そのドキュメントはどこにも見つかりません。これを理解するのに助けが必要です。
<>
演算子は、Row
のTable
とcase class
の間の関係を定義します。
case class User(id: Option[Int], first: String, last: String)
ROW |id | first | last |
したがって、データは最初にn-Tuple
(<>
の左側)として表から取り出され、次にcase class
(<>
の右側)に変換されます。
ケースクラスの変換を機能させるには、次の2種類のメソッドが必要です。
Row
からn-Tuple
からcase class
。scala> User.tupled
res6: ((Option[Int], String, String)) => User = <function1>
したがって、この関数は、引数としてトリプル(Option[Int], String, String)
を指定すると、User
を作成できます。
case class
からn-Tuple
はDBに書き込まれます。scala> User.unapply _
res7: User => Option[(Option[Int], String, String)] = <function1>
この関数は、逆の機能を提供します。ユーザーが与えられると、トリプルを抽出できます。このパターンはExtractor
と呼ばれます。ここでこれについてもっと学ぶことができます: http://www.scala-lang.org/old/node/112
これはscala演算子ではなく、slickの ShapedValue クラスによって定義されたメソッドです。
リンクしたドキュメントでわかるように、2つのメソッドを提供するケースクラスとの間でプロジェクションをマッピングするために使用されます
def * = (id.?, first, last) <> (User.tupled, User.unapply)
Slickソースリポジトリのクローンを作成 およびgrep for def <>
、あなたはそれを見つけるでしょう<>
は ShapedValue
のメソッドであり、 MappedProjection
を返します。