Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2013-01-01) 11. 使用第三方库整合数据库存取层

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

(本文译者是爱国者)

Integrating with other database libraries

你可以在Play中使用任何第三方SQL数据库存取依赖库, 并且很方便地从play.api.db.DB工具类中获得ConnectionDatasource

整合ScalaQuery

这里可以整合任何需要JDBC数据源的数据存取层依赖库,比如整合[[ScalaQuery |https://github.com/szeiger/scala-query]]:

import play.api.db._
import play.api.Play.current

import org.scalaquery.ql._
import org.scalaquery.ql.TypeMapper._
import org.scalaquery.ql.extended.{ExtendedTable => Table}

import org.scalaquery.ql.extended.H2Driver.Implicit._ 

import org.scalaquery.session._

object Task extends Table[(Long, String, Date, Boolean)]("tasks") {

  lazy val database = Database.forDataSource(DB.getDataSource())

  def id = column[Long]("id", O PrimaryKey, O AutoInc)
  def name = column[String]("name", O NotNull)
  def dueDate = column[Date]("due_date")
  def done = column[Boolean]("done")
  def * = id ~ name ~ dueDate ~ done

  def findAll = database.withSession { implicit db:Session =>
      (for(t <- this) yield t.id ~ t.name).list
  }

}

#### 通过JNDI暴露数据源

有些库需要从JNDI获取`Datasource`. 你可以通过在`conf/application.conf`添加如下的配置把Play托管的数据源通过JNDI的形式暴露出来

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
db.default.jndiName=DefaultDS

原文:https://github.com/playframework/Play20/wiki/ScalaDatabaseOthers

comments powered by Disqus