I started working for mirage-scala that is Scala binding of Mirage. mirage-scala works as wrapper of Mirage and provides the best interface to access to the database using Mirage for Scala.
This is a simple example to query using mirage-scala:
// A class that mapped to ResultList
class Book (
val bookId: Int,
val bookName: String,
val author: String,
val price: Int
)
// get Session and SqlManager
val session: Session = SessionFactory.getSession()
val sqlManager: SqlManager = session.getSqlManager()
// begin transaction
session.begin()
try {
val books: List[Book] = sqlManager.getResultList(
classOf[Book], Sql("""
SELECT BOOK_ID, BOOK_NAME, AUTHOR, PRICE
FROM BOOK
/*IF author!=null*/
WHERE AUTHOR = /*author*/
/*END*/
"""), Map("author"->"Naoki Takezoe"))
books.foreach { book =>
println("bookId: " + book.bookId)
println("bookName: " + book.bookName)
println("author: " + book.author)
println("price: " + book.price)
println("--")
}
// commit transaction
session.commit()
} catch {
// rollback transaction
ex: Exception => session.rollback()
}
A most important feature of Mirage is dynamic SQL template named 2waySQL. In Mirage, you have to create it as an external file on the classpath. However in mirage-scala, you can write it inline using multi-line string literal. Of course, you can also use an external file as following:
val result: List[Book] = sqlManager.getResultList(
classOf[Book],
SqlFile("META-INF/selectBooks.sql"),
Map("author"->"Naoki Takezoe"))
mirage-scala is still under development. I'm evaluating APIs feaibility. So APIs might be changed considerably in the release version.