play2.0 集成 squeryl

来源:互联网 发布:公安大数据应用 编辑:程序博客网 时间:2024/05/29 13:43

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

 

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

 

主要代码清单:

 

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

 

 

Java代码  收藏代码
  1. import sbt._  
  2. import Keys._  
  3. import PlayProject._  
  4.   
  5. object ApplicationBuild extends Build {  
  6.   
  7.     val appName         = "playWithSqueryl"  
  8.     val appVersion      = "1.0-SNAPSHOT"  
  9.   
  10.     val appDependencies = Seq(  
  11.         "org.squeryl" %% "squeryl" % "0.9.5"  
  12.     )  
  13.   
  14.     val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(  
  15.       // Add your own project settings here        
  16.     )  
  17.   
  18. }  
 

 

GlobalSettings.scala.

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

 

Scala代码  收藏代码
  1. import play.api._  
  2. import org.squeryl.adapters.H2Adapter  
  3. import org.squeryl.{Session, SessionFactory}  
  4. import play.api.db.DB  
  5.   
  6. object Global extends GlobalSettings {  
  7.   
  8.     override def onStart(app: Application) {  
  9.         implicit val _app = app  
  10.         Logger.info("Initializing squeryl session factory.")  
  11.         SessionFactory.concreteFactory = Some(() =>   
  12.             Session.create(DB.getConnection(), new H2Adapter)  
  13.         )  
  14.         Logger.info("Application has started")  
  15.     }  
  16.   
  17.     override def onStop(app: Application) {  
  18.         Logger.info("Application has stopped")  
  19.     }  
  20. }  
 

models.Library.scala

 

 

Java代码  收藏代码
  1. package models  
  2.   
  3. import org.squeryl.Schema  
  4.   
  5. class Book(val id: Long, val title: String)  
  6.   
  7. object Library extends Schema {  
  8.     val books = table[Book]("books")  
  9. }  

 

 

controllers.Application.scala

 

 

Java代码  收藏代码
  1. package controllers  
  2.   
  3. import play.api._  
  4. import play.api.mvc._  
  5. import views._  
  6. import models._  
  7.   
  8. object Application extends Controller {  
  9.   
  10.     import org.squeryl.PrimitiveTypeMode._  
  11.   
  12.     def TxAction(f: Request[AnyContent] => Result) = {  
  13.         Action {request =>  
  14.             inTransaction {  
  15.                 Logger.info("Calling action in squery transation manager.")  
  16.                 f(request)  
  17.             }  
  18.         }  
  19.     }  
  20.     
  21.   def index = TxAction { request =>   
  22.         val books = Library.books.filter(_ => true)  
  23.         Ok(html.index(books.toList))  
  24.   }  
  25.     
  26. }  

 

 

views.index.scala.html

 

 

Java代码  收藏代码
  1. @(books: List[Book])  
  2.   
  3. @main("How to use squeryl with play2") {  
  4.     <div>  
  5.         @books.map { book =>   
  6.             <p> @book.title </p>  
  7.         }      
  8.     </div>  

0 0
原创粉丝点击