本文来自:fair-jm.iteye.com 转截请注明出处
许久没有更新了 最近比较忙
要考试
自己也在写点其他的东西 仿照it客的视频写一个模仿拉手网安卓客户端的app
有兴趣的可以关注下:
https://github.com/fairjm/mylashou
https://github.com/fairjm/mylashou_server
其中server我打算用play改写视频中使用的servlet
好 废话不多说 第二篇的笔记整理 主要讲数据持久化 利用play自带的anorm(默认就有的)
slick 我的博客文章有介绍(http://fair-jm.iteye.com/blog/2070127)
squeryl 我用的不熟练 笔记中也没记录使用
在play console下要测试model的话可以使用
new play.core.StaticApplication(new java.io.File("."))
然后就可以像平常使用console一样操作那些model了
evolution:
这是一种自动更新表结构的功能 具体使用的话:
可以在conf/evolutions/default 写sql 用数字1开始命名
格式:
# --- !Ups 这个是执行升级的语句开始 写建立的语句 # --- !Downs 执行降级的语句开始 写删除的语句
使用Anorm:
用anorm.SQL来执行sql
查询:
val sql: SqlQuery = SQL("select * from products order by name asc")
获取结果三种方式:
1、第一种直接执行Row的apply方法 第二种用模式匹配 第三种用解析器组合:
sql执行有个隐函数(connection) 通过DB.withConnection得到:
import play.api.Play.current //import play.api.Play.current一定要导入 不然的话DB的隐含app函数会得不到 import play.api.db.DB def getAll: List[Product] = DB.withConnection { implicit connection => sql().map ( row => Product(row[Long]("id"), row[Long]("ean"), row[String]("name"), row[String]("description")) ).toList }
sql()返回的是Stream[SqlRow] 所以最后要转成List
2、第二种用模式匹配:
def getAllWithPatterns: List[Product] = DB.withConnection { implicit connection => import anorm.Row sql().collect { //因为直接用了case所以用collect来执行接受一个偏函数 case Row(Some(id: Long), Some(ean: Long), Some(name: String), Some(description: String)) => Product(id, ean, name, description) }.toList }
3、第三种用转换器:
RowParser[Product] -> ResultSetParser[List[Product]] -> 用sql的as函数: import anorm.RowParser val productParser: RowParser[Product] = { import anorm.~ import anorm.SqlParser._ long("id") ~ long("ean") ~ str("name") ~ str("description") map { case id ~ ean ~ name ~ description => Product(id, ean, name, description) } }
得到RowParser执行 *得到ResultSetParser
def getAllWithParser: List[Product] = DB.withConnection { implicit connection => sql.as(productParser *) }
多个parser也可以用~连接 其实他就是做了获取结果之后一一对应然后赋值 用~操作符执行
增删改:
用SqlQuery的executeUpdate()方法
def insert(product: Product): Boolean = DB.withConnection { implicit connection => val addedRows = SQL("""insert into products values ({id}, {ean}, {name}, {description})""").on( "id" -> product.id,"ean" -> product.ean,"name" -> product.name,"description" -> product.description ).executeUpdate() addedRows == 1 //返回的是修改的行 } def update(product: Product): Boolean = DB.withConnection { implicit connection => val updatedRows = SQL("""update products set name = {name}, ean = {ean}, description = {description} where id = {id} """).on( "id" -> product.id, "name" -> product.name, "ean" -> product.ean, "description" -> product.description). executeUpdate() updatedRows == 1 } def delete(product: Product): Boolean = DB.withConnection { implicit connection => val updatedRows = SQL("delete from products where id = {id}"). on("id" -> product.id).executeUpdate() updatedRows == 0 //这边有误 如果删除了还是返回1 }
==============================================================
缓存(初步):
用系统自带的Cache
用set设置 用getAs获得 得到的是Some()或者None:
def show(productId: Long) { Cache.getAs[Product]("product-" + productId) match { case Some(product) => Ok(product) case None => Ok(Product.findById(productId)) } }
==============================================================
==============================================================
相关推荐
Play Framework2是一个强大的Java和Scala应用开发框架,它以其简洁的API、快速的开发周期以及对Web标准的紧密集成而闻名。本教程旨在为初学者和有经验的开发者提供全面的指导,帮助他们掌握Play Framework2的核心...
1. **模块化设计**:Play Framework采用了模块化的设计,使得开发者可以方便地添加或替换特定功能,如模板引擎、持久化层等。 2. **异步编程**:Play Framework基于Akka框架,支持非阻塞I/O和异步处理,提高了Web...
### Play Framework Cookbook 知识点解析 #### 一、Play Framework 概览 - **框架简介**:Play Framework 是一个开源的 Web 开发框架,基于 Java 和 Scala 编程语言。它采用轻量级、非阻塞的服务端架构,特别适合...
Play Framework 是一个开源的Web应用框架,主要针对Java和Scala开发者设计,它的核心理念是简化开发流程,提高开发效率,并且特别强调了RESTful架构风格。这个“playframework中文教程.zip”压缩包很可能是为了帮助...
Play Framework框架 Play Framework框架是一种基于Java的软件框架,旨在提高开发效率和提供REST式的架构风格。该框架可以让开发者继续使用他们喜欢的开发环境或繻库,不需要切换到另一种语言、IDE或者其他繻库。 ...
- **国际化支持**:为了满足全球化的市场需求,Play Framework 提供了强大的国际化工具。书中会介绍如何为应用程序添加多语言支持。 #### 三、实践技巧与策略 - **单元测试与集成测试**:高质量的应用离不开完善的...
为了支持国际化的错误消息,PlayFramework遵循Java的国际化惯例,错误消息可以从消息包(message bundle)中获取,其中包含的key可以指向一个消息包中的条目,使得错误消息可以针对不同的语言进行翻译。 在Play...
play2-war-plugin, 用于 Play Framework 2.x的WAR插件 用于 Play Framework 2.x的 WAR插件Current versions: Play 2.2.x : 1.2.1 Play 2.3.0 -> 2.3.1 : 1.3-beta1 (Scala 2.1
Play Framework 是一个开源的Web应用框架,以Java和Scala为后盾,致力于提供简洁、高效、可测试的开发体验。本文将深入探讨Play Framework的基本概念、常用命令、Eclipse调试方法、模式、控制器、工具包、session...
9. **tasks文件**:在提供的文件名称列表中,"tasks"可能是指Play Framework中的任务或者构建任务,如Sbt(Simple Build Tool)中的自定义任务,这些任务可以扩展构建过程,执行特定的操作。 通过这篇学习之路,你...
playframework javaweb playframework javaweb
1. Play Framework 介绍 2. 创建和发布 Play 应用 2.1 创建 Play 的工程 2.2 Play 常用指令 2.3 Play 应用的 JVM 调优 3. 如何读取静态资源 4. Play框架的配置文件 5. 使用 Play 框架开发 Java 应用 5.1 HTTP...
Play Framework是Java Web开发领域的一款流行开源框架,以其简洁、高效和模块化的特性著称。在标题"playFramework1.2.3"中,我们关注的是Play Framework的1.2.3版本。这个版本是在其早期发展的一个稳定版本,提供了...
4. **模块化结构**:Play Framework支持模块化,允许开发者选择或创建自己的模块来扩展框架功能。 5. **强大的路由系统**:通过简洁的路由定义,可以将URL映射到控制器方法,方便处理HTTP请求。 6. **模板引擎**:...
本篇文章将引导你通过创建一个简单的待办事项(Todo List)应用来了解Play Framework 2.0的基本概念和操作流程。 一、环境准备 在开始之前,确保你的系统已安装Java Development Kit (JDK) 和 sbt (Scala Build ...
Mastering Play Framework for Scala
play framework2.01上半部分。
9. **JPA持久化**:Play框架集成了JPA,可以方便地操作数据库,如启动实体管理器、事务管理、使用`play.db.jpa.Model`类进行ORM等。 10. **异步编程**:Play支持异步Jobs、预定义任务和HTTP下的异步编程,如使用...
模型通常使用Ebean或Anorm等持久化库来与数据库交互。 2. **视图(View)**:视图通常是HTML模板文件,可以使用Scala或Java语法进行编写。在`todolist`中,我们可能会找到一个`message.scala.html`文件,它定义了...
- **ORM 框架集成**:介绍如何将 Ebean 等 ORM 工具与 Play Framework 结合使用,简化数据持久化操作。 - **数据库操作**:讲解如何通过 Play Framework 提供的数据访问层执行 CRUD 操作。 ##### 5. 安全性增强 - ...