由于对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>
}
分享到:
相关推荐
### Play2.0 for Java Developers #### 概述 Play2.0是一个现代的Web应用框架,它基于Java和Scala语言构建,旨在提供简洁、快速且可扩展的应用开发体验。对于Java开发者而言,Play2.0提供了一套完整的Java API,...
- **与 Akka 集成**:Akka 是一个用于构建高度并发、分布式和容错系统的工具包,文档解释了如何将 Akka 集成到 Play 2.0 中。 - **国际化**:提供了多语言支持的方法,帮助开发者创建全球化应用。 - **全局对象**:...
《Play Framework 2.0 - 创建你的第一个应用程序》 Play Framework 2.0 是一个开源的Web应用框架,它基于Scala和Java语言,遵循“模式-动作”(Action)架构,提供了一种轻量级、敏捷开发的方式。本篇文章将引导你...
此外,Play框架与Akka框架紧密集成,提供非阻塞I/O和异步处理能力,提升了应用的性能和响应速度。 在创建“Play留言板”应用时,我们首先要配置数据库连接。这里使用的是MySQL,一个广泛使用的开源关系型数据库管理...
在"play1.2.4集成Swagger"的场景中,我们需要将Swagger整合到Play Framework 1.2.4版本中,以便为我们的API提供强大的文档和测试功能。以下是一些关键步骤和知识点: 1. **安装Swagger**: 首先,你需要添加Swagger...
6. **测试(Testing)**:Play Framework支持单元测试和集成测试,允许开发者编写针对模型、视图和控制器的测试用例。测试代码可以帮助确保应用程序的正确性,尤其是在开发过程中。 7. **依赖管理(Dependency ...
在Android应用开发中,Google Play结算库是开发者用于集成Google Play内购服务的重要工具。本文将详细介绍如何接入Google Play结算库V2.0.3版本,并实现支付流程,以及调用支付的封装。 首先,我们需要了解Google ...
UDP通信协议播放器: 功能如下: 1.播放 2.暂停 3.停止 4.上一个视频 5.下一个视频 6.指定视频播放 7.音量 十 8.音量 一
### 苹果设备认证芯片2.0C:深入解析 #### 一、概述 苹果公司推出的附件设备认证芯片手册2.0C版本是为开发者提供的一份重要文档,旨在帮助他们了解并应用苹果设备的认证机制。这份文档包含了苹果认证芯片(iPod ...
airplay 集成文档, 快速集成,用于展示airplay按钮等
"setup.exe"是安装程序,它是将三星Play Camera For XP 2.0.0.15集成到用户计算机中的关键文件。运行这个可执行文件,用户可以按照向导提示完成软件的安装过程。在安装过程中,系统会检查兼容性、复制必要的文件、...
GooglePlay2 GooglePlay2.0,应用市场,一款应用下载软件,框架式编程,使用ButterKnife,okHttp网络请求,glide图片加载。 第二版效果图 GooglePlay第一版效果图
综上所述,CarPlay是一个高度集成、设计以用户为中心、不断更新的技术平台。它将智能手机与汽车紧密地结合起来,为驾驶者提供了一个更加安全和便捷的使用环境。开发者若要开发或优化CarPlay相关应用,必须遵循苹果...
c-play v2.0b39官网最新版,这是一款非常不错的播放器,适当设置一下,声音要比foobar好,另外缓冲设置也比较重要,听感变化很大。用来播放音乐还是非常不错滴。注:要使用这个播放器,你的声卡必须支持asio,或...
本教程将详细讲解如何在Android应用中集成支付宝支付2.0版本,主要关注核心流程、关键API以及注意事项。 首先,我们需要了解支付宝支付2.0的主要特性。它提供了更安全、快速的支付体验,同时简化了开发者集成过程。...
13. USB的热插拔(Hot Swapping)和即插即用(Plug and Play):USB设备可以在不关闭电源的情况下进行连接和断开,且系统能自动识别和配置设备。 通过USB2.0技术规范,设计者可以构建符合标准的USB设备,并确保这些...
10. **集成外部资源**:SWF、JPEG、MP3等不同格式的文件可以通过ActionScript 2.0加载到Flash项目中,增强内容的多样性。 文件"actionscript2.0.chm"很可能是一个帮助文档,它包含了ActionScript 2.0的详细参考信息...
在Android应用开发中,集成Google Play结算库是一个关键步骤,它允许开发者为用户提供方便、安全的内购体验。Google Play结算库4.0版本引入了一系列更新和改进,以提升用户体验和开发者工具的功能性。以下是对这个...
例如,`video.play()`用于播放视频,`video.pause()`暂停,`video.seek(time)`跳转到指定时间点,`video.width`和`video.height`调整视频尺寸,`video.attachNetStream(netStream)`连接到网络流等。 6. **事件处理*...