How to use Anorm outside of Play?

2019-04-06 13:11发布

How do you use Anorm outside of play in Scala? In the Anorm document for play, it simply uses something like:

DB.withConnection { implicit c =>
  val result: Boolean = SQL("Select 1").execute()    
} 

The DB object is only for Play. How do you use Anorm alone without using Play?

2条回答
时光不老,我们不散
2楼-- · 2019-04-06 13:29

There is no need of DB object (part of Play JDBC not Anorm). Anorm works as along as you provide it connection as implicit:

implicit val con: java.sql.Connection = ??? // whatever you want to resolve connection

SQL"SELECT * FROM Table".as(...)

You can resolve JDBC connection in many way: basic DriverManager.getConnection, JNDI, ...

As for dependency, it's easy to add it in SBT: How to declare dependency on Play's Anorm for a standalone application? .

查看更多
干净又极端
3楼-- · 2019-04-06 13:32

You could also emulate the DB object as follows (i haven't tried this though)

 object DB {
    def withConnection[A](block: Connection => A): A = {
      val connection: Connection = ConnectionPool.borrow()

      try {
        block(connection)
      } finally {
        connection.close()
      }
    }
  }

Taken from https://github.com/TimothyKlim/anorm-without-play/blob/master/src/main/scala/Main.scala

查看更多
登录 后发表回答