教程: Play Framework 2 with Scala, Anorm, JSON, CoffeeScript, jQuery & Heroku
来源:互联网 发布:马尔文粒径分析软件 编辑:程序博客网 时间:2024/05/29 12:28
一种全新的开发技术架构Play + Scala:教程: Play Framework 2 with Scala, Anorm, JSON, CoffeeScript, jQuery & Heroku,大概步骤:
1.下载安装Play2 RC2
2.创建一个应用: play new foobar,提示中选择Scala
3.在新创建的目录foobar中生成IDE配置文件,如使用IntelliJ,play idea;如是eclipse: play eclipsify
4.启动Play服务器:
play run
可在浏览器键入http://localhost:9000
5. Play 2 with Scala并不提供缺省的ORM,使用的Anorm,Anorm并不是一个类似Hibernate的ORM,不能自动创建数据表结构,创建一个文件:conf/evolutions/default/1.sql,在里面写入SQL语句:
# --- First database schema
# --- !Ups
CREATE TABLE bar (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
# --- !Downs
DROP TABLE IF EXISTS bar;
Anorm能够使用Scala的"case class"作为值对象,作为一个单例实例进行持久和CRUD的接口对象,创建一个Scala的Bar case class,文件名为:app/models/Bar.scala
package models
import play.api.db._
import play.api.Play.current
import anorm._
import anorm.SqlParser._
case class Bar(id: Pk[Long], name: String)
object Bar {
val simple = {
get[Pk[Long]]("id") ~
get[String]("name") map {
case id~name => Bar(id, name)
}
}
def findAll(): Seq[Bar] = {
//banq注: 直接进行数据库操作,也够丑陋的。
DB.withConnection { implicit connection =>
SQL("select * from bar").as(Bar.simple *)
}
}
def create(bar: Bar): Unit = {
DB.withConnection { implicit connection =>
SQL("insert into bar(name) values ({name})").on(
'name -> bar.name
).executeUpdate()
}
}
}
6.在conf/application.conf中配置一个内存h2数据库数据源:
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
7.创建一个应用控制器用来转换Http请求到Bar对象,然后保存到数据库,app/controllers/Application.scala:
package controllers
import play.api.data.Form
import play.api.data.Forms.{single, nonEmptyText}
import play.api.mvc.{Action, Controller}
import anorm.NotAssigned
import models.Bar
object Application extends Controller {
//将http请求数据进行验证转为Form对象
val barForm = Form(
single("name" -> nonEmptyText)
)
def index = Action {
Ok(views.html.index(barForm))
}
//接受前台新增Bar命令。
def addBar() = Action { implicit request =>
barForm.bindFromRequest.fold(
errors => BadRequest,
{
case (name) =>
//调用Bar内部保存方法 数据库保存。
Bar.create(Bar(NotAssigned, name))
Redirect(routes.Application.index())
}
)
}
}
8.创建一个映射POST请求路由到上面应用控制器,配置在"conf/routes":
POST /addBar controllers.Application.addBar
9.编辑MVC的界面:app/views/index.scala.html
@(form: play.api.data.Form[String])
@main("Welcome to Play 2.0") {
@helper.form(action = routes.Application.addBar) {
@helper.inputText(form("name"))
<input type="submit"/>
}
}
在浏览器键入http://localhost:9000,进行数据库构建,测试表单,如果一切正常,当按表单提交,应该转到index页面。
10.在app/controllers/Application.scala创建一个JSON服务用来获得所有bar实例集合:
import com.codahale.jerkson.Json
def listBars() = Action {
val bars = Bar.findAll()
val json = Json.generate(bars)
Ok(json).as("application/json")
}
将 “/listBars” 加入conf/routes:
GET /listBars controllers.Application.listBars
在浏览器测试http://localhost:9000/listBars
11.在app/assets/javascripts/index.coffee创建一个CoffeeScript 文件使用jQuery抓取JSON包,遍历Bar对象集合,逐个当前页面显示:
$ ->
$.get "/listBars", (data) ->
$.each data, (index, item) ->
$("#bars").append "<li>Bar " + item.name + "</li>"
12.修改app/views/index.scala.html,使用自动编译的javascript源码:
<script src="@routes.Assets.at("javascripts/index.js")" type="text/javascript"></script>
<ul id="bars"></ul>
在浏览器键入 http://localhost:9000 。
以上开发完成,可以使用Heroku部署到云中。见原文。
这是一篇很干净的通过DDD实现领域模型的代码案例。使用Java的可以参考JdonFramework,使用Ruby也可以参考网上案例。
在以上进入代码之前,要做好领域建模工作
1.下载安装Play2 RC2
2.创建一个应用: play new foobar,提示中选择Scala
3.在新创建的目录foobar中生成IDE配置文件,如使用IntelliJ,play idea;如是eclipse: play eclipsify
4.启动Play服务器:
play run
可在浏览器键入http://localhost:9000
5. Play 2 with Scala并不提供缺省的ORM,使用的Anorm,Anorm并不是一个类似Hibernate的ORM,不能自动创建数据表结构,创建一个文件:conf/evolutions/default/1.sql,在里面写入SQL语句:
# --- First database schema
# --- !Ups
CREATE TABLE bar (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
# --- !Downs
DROP TABLE IF EXISTS bar;
Anorm能够使用Scala的"case class"作为值对象,作为一个单例实例进行持久和CRUD的接口对象,创建一个Scala的Bar case class,文件名为:app/models/Bar.scala
package models
import play.api.db._
import play.api.Play.current
import anorm._
import anorm.SqlParser._
case class Bar(id: Pk[Long], name: String)
object Bar {
val simple = {
get[Pk[Long]]("id") ~
get[String]("name") map {
case id~name => Bar(id, name)
}
}
def findAll(): Seq[Bar] = {
//banq注: 直接进行数据库操作,也够丑陋的。
DB.withConnection { implicit connection =>
SQL("select * from bar").as(Bar.simple *)
}
}
def create(bar: Bar): Unit = {
DB.withConnection { implicit connection =>
SQL("insert into bar(name) values ({name})").on(
'name -> bar.name
).executeUpdate()
}
}
}
6.在conf/application.conf中配置一个内存h2数据库数据源:
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
7.创建一个应用控制器用来转换Http请求到Bar对象,然后保存到数据库,app/controllers/Application.scala:
package controllers
import play.api.data.Form
import play.api.data.Forms.{single, nonEmptyText}
import play.api.mvc.{Action, Controller}
import anorm.NotAssigned
import models.Bar
object Application extends Controller {
//将http请求数据进行验证转为Form对象
val barForm = Form(
single("name" -> nonEmptyText)
)
def index = Action {
Ok(views.html.index(barForm))
}
//接受前台新增Bar命令。
def addBar() = Action { implicit request =>
barForm.bindFromRequest.fold(
errors => BadRequest,
{
case (name) =>
//调用Bar内部保存方法 数据库保存。
Bar.create(Bar(NotAssigned, name))
Redirect(routes.Application.index())
}
)
}
}
8.创建一个映射POST请求路由到上面应用控制器,配置在"conf/routes":
POST /addBar controllers.Application.addBar
9.编辑MVC的界面:app/views/index.scala.html
@(form: play.api.data.Form[String])
@main("Welcome to Play 2.0") {
@helper.form(action = routes.Application.addBar) {
@helper.inputText(form("name"))
<input type="submit"/>
}
}
在浏览器键入http://localhost:9000,进行数据库构建,测试表单,如果一切正常,当按表单提交,应该转到index页面。
10.在app/controllers/Application.scala创建一个JSON服务用来获得所有bar实例集合:
import com.codahale.jerkson.Json
def listBars() = Action {
val bars = Bar.findAll()
val json = Json.generate(bars)
Ok(json).as("application/json")
}
将 “/listBars” 加入conf/routes:
GET /listBars controllers.Application.listBars
在浏览器测试http://localhost:9000/listBars
11.在app/assets/javascripts/index.coffee创建一个CoffeeScript 文件使用jQuery抓取JSON包,遍历Bar对象集合,逐个当前页面显示:
$ ->
$.get "/listBars", (data) ->
$.each data, (index, item) ->
$("#bars").append "<li>Bar " + item.name + "</li>"
12.修改app/views/index.scala.html,使用自动编译的javascript源码:
<script src="@routes.Assets.at("javascripts/index.js")" type="text/javascript"></script>
<ul id="bars"></ul>
在浏览器键入 http://localhost:9000 。
以上开发完成,可以使用Heroku部署到云中。见原文。
这是一篇很干净的通过DDD实现领域模型的代码案例。使用Java的可以参考JdonFramework,使用Ruby也可以参考网上案例。
在以上进入代码之前,要做好领域建模工作
0 0
- Play Framework 2 with Scala, Anorm, JSON, CoffeeScript, jQuery & Heroku
- 教程: Play Framework 2 with Scala, Anorm, JSON, CoffeeScript, jQuery & Heroku
- play framework anorm 批量执行
- play framework anorm orm 化构想
- play Framework play json
- scala play处理json
- play with framework
- play framework教程
- Getting Started with Play 2, Scala, and Squeryl
- Play FrameWork JSON操作小结
- Play framework 2.0 -模板引擎-基于scala
- play framework指南, 教程 & 参考手册
- play framework系列教程之安装play framework
- play! with scala 获取配置文件的内容
- play! with scala oracle数据库驱动
- Play 2.0 AnORM 访问SQL数据库
- play anorm 与Mysql 字段映射
- play framework 2
- 简单工厂模式
- Linux内核中实现IPV4整数转换成字符串
- 检测是否开启推送通知功能
- HDOJ 2602 Bone Collector(背包问题)
- poj--3905--Perfect Election(2-sat)
- 教程: Play Framework 2 with Scala, Anorm, JSON, CoffeeScript, jQuery & Heroku
- 《Linux命令、编辑器与Shell编程》读书笔记4.2-格式化文本工具(awk)
- C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器
- 关于Ubuntu10.04在开发驱动模块及其他模块时printk无法打印到图形界面终端的问题
- 【Android实战】播放assets或者raw文件夹下的视频文件
- 一起talk C栗子吧(第五十九回:C语言实例--字符串概述)
- vxworks下辅助时钟aux clk的使用示例
- oc swift 混编
- 如何阅读一本书读后总结