8

Play 2.1(Scala)で読み取り専用のWebアプリケーションを実装します。JSONに読み取られたデータの読み取りとマーシャリングのみを行うので、他のDSLとマッピングは避けたいと思います。

私はdapper-dot-netを使用して.NET/C#で同様のプロジェクトを実行し、結果に非常に満足しました。大騒ぎせず、ボイラープレートもあまりありません。

私は現在見ています:

  • anormanormtypedも非常に有望に見えますが、おそらく早期に採用する予定です。変数をケースクラスコンストラクターパラメーターに手動でマッピングすることを避けるのは素晴らしいことのようです。)
  • 前日譚
  • slick -2.1でSQLを実行する主な方法であり、主にプレーンSQLAPIであると想定されているため
4

2 に答える 2

3

スリックはとても良いです。それについてのこの短い本を必ずチェックしてください-それはいくつかの基本を説明するのに非常に優れています。ドキュメントと一緒に、それはあなたをすぐに前進させるでしょう。また、githubのドキュメントの方が優れていることに注意してください。最新のものはまだ公開されていません。

プレーンSQLオプションの使用は非常によくサポートされています。ただし、単純なSQLクエリでは、型チェックに関してはそれほど多くはありません。それ以外の場合、Scala 2.10を使用してプレーンクエリを実行するのは、次のように簡単です。

sql"select * from coffees where name = $name".as[Coffee]

$nameこれにより、実際にはクエリに含まれていないため、SQLの挿入からも保護されます。詳細については、ドキュメントを参照してください。

于 2013-01-24T09:31:03.990 に答える
0

私はGitHubに、 dbmapperと呼ばれるDapperに大いに触発されたプロジェクトを持っています

Slickに対する利点は次のとおりです。

  • DSLなし-あなたはすでに良いデータDSLを知っています、それはSQLと呼ばれています
  • 完全に非同期
  • ボイラープレートコードはほとんどありません

次に例を示します。

// Scala class that maps to the book table, with columns to match the class members
case class Book(
  bookId: Int,
  title: String,
  retailPrice: BigDecimal,
  publishDate: LocalDate)

// mapping function from table row to Book class, 
// auto generated at compile time by Scala Macro  
implicit def rowToBook: RowData => Book = (r) => DbCodeGenerator.rowToClass[Book](r)

// query returning future list of books, 
// safe query interpolation, the maxPrice is converted to a query argument  
val maxPrice = 11.99
val allBooksFuture = DbAsync.exec[Book](q"select * from book where retail_price < $maxPrice")        

val oneBook: Future[Book] = DbAsync.execOne[Book](q"select * from book where book_id = 2")

// returns Future[Option[]]     
val maybeOneBook: Future[Option[Book]] = DbAsync.execOneOrNone[Book](q"select * from book where book_id = -123")

dotnetの世界からdapperを知っているなら、dbmapperは奇妙に馴染みがあると感じるでしょう!

于 2014-09-15T13:54:00.363 に答える