`
tomorrow009
  • 浏览: 45052 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

play2.0 集成 squeryl

阅读更多

由于对play2.0自带的Anorm比较不满, 所以研究了一下如何集成squeryl到play2, 附件是示例项目, 十分简单, 仅展示了如何使用squeryl建立model到单表的映射以及查询功能.

 

使用的类库: play2.0, squeryl 0.9.5, h2db

 

主要代码清单:

 

Build.scala. 这里主要是引用squeryl的依赖

 

 

import sbt._
import Keys._
import PlayProject._

object ApplicationBuild extends Build {

    val appName         = "playWithSqueryl"
    val appVersion      = "1.0-SNAPSHOT"

    val appDependencies = Seq(
      	"org.squeryl" %% "squeryl" % "0.9.5"
    )

    val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
      // Add your own project settings here      
    )

}
 

 

GlobalSettings.scala.

主要是override onStart, 在其中构建squeryl的SessionFactory. 有了这个SessionFactory, 后面才可以在Controller中使用inTranscation{...}

 

import play.api._
import org.squeryl.adapters.H2Adapter
import org.squeryl.{Session, SessionFactory}
import play.api.db.DB

object Global extends GlobalSettings {

    override def onStart(app: Application) {
        implicit val _app = app
        Logger.info("Initializing squeryl session factory.")
        SessionFactory.concreteFactory = Some(() => 
            Session.create(DB.getConnection(), new H2Adapter)
        )
        Logger.info("Application has started")
    }

    override def onStop(app: Application) {
        Logger.info("Application has stopped")
    }
}
 

models.Library.scala

 

 

package models

import org.squeryl.Schema

class Book(val id: Long, val title: String)

object Library extends Schema {
    val books = table[Book]("books")
}

 

 

controllers.Application.scala

 

 

package controllers

import play.api._
import play.api.mvc._
import views._
import models._

object Application extends Controller {

    import org.squeryl.PrimitiveTypeMode._

    def TxAction(f: Request[AnyContent] => Result) = {
        Action {request =>
            inTransaction {
                Logger.info("Calling action in squery transation manager.")
                f(request)
            }
        }
    }
  
  def index = TxAction { request => 
        val books = Library.books.filter(_ => true)
        Ok(html.index(books.toList))
  }
  
}

 

 

views.index.scala.html

 

 

@(books: List[Book])

@main("How to use squeryl with play2") {
	<div>
		@books.map { book => 
			<p> @book.title </p>
		}    
	</div>
}
 

 

分享到:
评论
2 楼 tomorrow009 2012-07-25  
aninfeel 写道
play2.0自废武功了,虽然api和配置项更规范了,但是热加载能力回到了普通j2ee的水平,比规范?比得过各种j2ee吗?

此评论貌似和本文无关.
1 楼 aninfeel 2012-07-16  
play2.0自废武功了,虽然api和配置项更规范了,但是热加载能力回到了普通j2ee的水平,比规范?比得过各种j2ee吗?

相关推荐

Global site tag (gtag.js) - Google Analytics