私は現在、Play フレームワークを使用して Scala で小さなアプリケーションを開発しています。ユーザーが行った操作のリストを保持したいと考えています。私がやっているように、Anorm だけを使用して ID の単純なリスト (List[Long]) を保存することは可能ですか?
そうでなければ、それを機能させるために他に何を使用できますか? Scala Play!で説明されているような ORM を使用する必要がありますか? anorm または ORM を使用していますか?
私は現在、Play フレームワークを使用して Scala で小さなアプリケーションを開発しています。ユーザーが行った操作のリストを保持したいと考えています。私がやっているように、Anorm だけを使用して ID の単純なリスト (List[Long]) を保存することは可能ですか?
そうでなければ、それを機能させるために他に何を使用できますか? Scala Play!で説明されているような ORM を使用する必要がありますか? anorm または ORM を使用していますか?
SQL データベースへの永続化について話している場合は、Anorm が確実にそれを処理できます。
最も基本的なレベルでは、SQL データベースに長整数のテーブルを作成し、Anorm を使用してリストを永続化できます。UserActions
と呼ばれるその唯一の列を持つ と呼ばれる単一列のテーブルに整数を格納すると仮定しますaction
。
def saveList(list: List[Long]) = {
DB.withConnection { implicit connection =>
val insertQuery = SQL("insert into UserActions(action) values ({action})")
val batchInsert = (insertQuery.asBatch /: list)(
(sql, elem) => sql.addBatchParams(elem)
)
batchInsert.execute()
}
}
私はあなたのために小さなデモをまとめて、それを Heroku にプッシュしています。すぐにリンクを更新します (編集: Heroku と私は今夜うまくいっていません。申し訳ありません)。
コードは私の Github にあります: https://github.com/ryantanner/anorm-b atch-demo
models/UserActions.scala を調べて、具体的にそのスニペットを見つけてください。残りは、デモをより面白くするための綿毛です。
ここで、一歩下がって、これらのユーザー操作についてどのような情報が必要かを自問してみます。意味的に、その List[Long]はどういう意味ですか? これらのユーザー アクションに関する情報をさらに保存する必要がありますか? 実際には (UserID、PageVisited、Timestamp) の行のようなものである必要がありますか?
Anorm の BatchSql が最近更新されました。最新のものをチェックしたい場合があります。
未テスト
次のようなバッチ挿入ステートメントを作成する必要があると思います。
val insertStatement =
SQL("""INSERT INTO UserOperations (id) VALUES ({id})""")
.asBatch
.addBatchParamsList(List(Seq(1), Seq(2)))
.execute()