2013-01-24 26 views
8

Tôi sẽ triển khai ứng dụng web chỉ đọc trong Play 2.1 (Scala). Vì tôi sẽ chỉ đọc và sửa đổi dữ liệu đọc thành JSON nên tôi muốn tránh mọi DSL và ánh xạ khác.Lớp truy cập SQL nào để sử dụng để đọc đơn giản trong Play-Scala?

Tôi đã thực hiện các dự án tương tự trong .NET/C# bằng cách sử dụng dapper-dot-net và rất hài lòng với cách mọi thứ được bật. Không ồn ào và không có nhiều nồi hơi tấm.

Tôi hiện đang tìm kiếm tại địa chỉ:

  • anorm (anormtyped trông rất hứa hẹn quá, nhưng có lẽ là quá sớm để áp dụng Tránh ánh xạ thủ công biến cho trường hợp các thông số constructor lớp dường như tuyệt vời..)
  • prequel
  • slick - bởi vì nó được coi là con đường chính của làm SQL trong 2.1 và chủ yếu là SQL API đơn giản
+0

Tôi có lẽ phải rõ ràng hơn về việc xem xét slick vì nó được cho là cách ưa thích để thực hiện SQL trong Play 2.1. Tài liệu của họ về loại SQL đơn giản cho thấy họ thích hai API kia. –

Trả lời

3

Slick rất tốt. Hãy chắc chắn rằng bạn kiểm tra this short book về nó - nó rất tốt tại giải thích một số vấn đề cơ bản. Cùng với các tài liệu, nó sẽ giúp bạn tiến nhanh chóng. Ngoài ra, lưu ý rằng các tài liệu trong github là tốt hơn - mới nhất chưa được xuất bản.

Sử dụng tùy chọn đồng bằng sql được hỗ trợ rất tốt. Với các truy vấn sql đơn giản, bạn không có nhiều về mặt kiểm tra kiểu. Nếu không, sử dụng Scala 2.10 làm một truy vấn đơn giản là dễ dàng như:

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

này thậm chí sẽ bảo vệ bạn khỏi injction sql, như $name không phải là thực sự trong truy vấn. Xem docs để biết thêm thông tin.

+0

xem nhận xét của tôi về câu hỏi gốc. Bạn đã sử dụng SQL API đơn giản hay chỉ các API khác? –

+0

Tôi thấy bây giờ. Và tôi bắt đầu thích Slick. Tôi vẫn phải viết 'GetResult' mặc dù? –

0

tôi có một dự án trên GitHub được ồ ạt lấy cảm hứng từ Dapper, gọi dbmapper

Ưu điểm so với Slick là:

  • không DSL - bạn đã biết một DSL dữ liệu tốt, nó được gọi là SQL
  • hoàn toàn không đồng bộ
  • rất ít mã boilerplate

Dưới đây là một ví dụ:

// 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") 

Nếu bạn biết đoan trang từ thế giới DotNet rồi dbmapper sẽ cảm thấy kỳ lạ quen thuộc!

+0

Trông rất hứa hẹn! Thật không may, chúng tôi đã chuyển từ Play/Scala vì thiếu sự hỗ trợ cho Windows trong sản xuất tại Play vào thời điểm đó. –

Các vấn đề liên quan