如何在Play框架之外使用Anorm?

9

如何在Scala的play之外使用Anorm?在play的Anorm文档中,仅仅使用了下面这样的语句:

DB.withConnection { implicit c =>
  val result: Boolean = SQL("Select 1").execute()    
} 
< p > DB 对象仅适用于 Play。如果不使用 Play,如何单独使用 Anorm?< /p >

您提供的c是数据库连接对象,类型为java.sql.Connection。您可以提供一个真实的连接并将其作为隐式参数传入。 - Bob Dalgleish
3个回答

14

不需要使用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的依赖关系以用于独立应用程序?


请注意,现在Anorm已经完全独立,包括其文档:http://playframework.github.io/anorm/ - cchantep

1

0
以下是适用于我的代码的文档:
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)
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接