如何在Scala的play之外使用Anorm?在play的Anorm文档中,仅仅使用了下面这样的语句:
DB.withConnection { implicit c =>
val result: Boolean = SQL("Select 1").execute()
}
< p > DB
对象仅适用于 Play。如果不使用 Play,如何单独使用 Anorm?< /p >
如何在Scala的play之外使用Anorm?在play的Anorm文档中,仅仅使用了下面这样的语句:
DB.withConnection { implicit c =>
val result: Boolean = SQL("Select 1").execute()
}
< p > DB
对象仅适用于 Play。如果不使用 Play,如何单独使用 Anorm?< /p >
不需要使用DB
对象(它是Play JDBC的一部分,而不是Anorm)。只要将连接作为隐式参数提供给Anorm,它就可以正常工作:
没有必要使用DB
对象(它是Play JDBC的一部分,而不是Anorm)。只要将连接作为隐式参数提供给Anorm,它就可以正常工作:
implicit val con: java.sql.Connection = ??? // whatever you want to resolve connection
SQL"SELECT * FROM Table".as(...)
您可以通过多种方式解决JDBC连接问题:基本的DriverManager.getConnection
、JNDI等。
至于依赖关系,可以很容易地在SBT中添加:如何声明对Play's Anorm的依赖关系以用于独立应用程序?。
object DB {
def withConnection[A](block: Connection => A): A = {
val connection: Connection = ConnectionPool.borrow()
try {
block(connection)
} finally {
connection.close()
}
}
}
build.sbt
中包含的依赖项入口:// https://mvnrepository.com/artifact/org.playframework.anorm/anorm
libraryDependencies += "org.playframework.anorm" %% "anorm" % "2.6.7"
@Singleton
class DBUtils {
val schema = AppConfig.defaultSchema
def withDefaultConnection(sqlQuery: SqlQuery) = {
// could replace with DBCP, not got a chance yet
val conn = DriverManager.getConnection(AppConfig.dbUrl,AppConfig.dbUser, AppConfig.dbPassword)
val result = Try(sqlQuery.execute()(conn))
conn.close()
result
}
}
object DBUtils extends DBUtils
withDefaultConnection
方法进行执行: def saveReviews(listOfReviews: List[Review]):Try[Boolean]= {
val query = SQL(
s"""insert into aws.reviews
| ( reviewerId,
| asin,
| overall,
| summary,
| unixReviewTime,
| reviewTime
| )
|values ${listOfReviews.mkString(",")}""".stripMargin)
//println(query.toString())
DBUtils.withDefaultConnection(query)
}
c
是数据库连接对象,类型为java.sql.Connection
。您可以提供一个真实的连接并将其作为隐式参数传入。 - Bob Dalgleish