Play Framework + ReactiveMongo 环境搭建
Play!是一个full-stack(全栈的)Java/Scala Web应用框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的模板引擎,以及建立一个现代Web应用所需的所有东西。
Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。
ReactiveMongo 是一个 MongoDB 的 Scala 驱动,提供完全的非堵塞和异步 I/O 操作。
以上就百度百科对Play! 以及MongoDB的简介。这篇博客就是简单的介绍Play+Mongo的环境搭建。
工具与环境:
- 编译器 -IDEA
- Scala -version 2.11.6
- Play -version 2.3.10
- MongoDB -version 3.0.6
- Sbt -version 0.13.8
- Reactivemongo -version 0.10.5.0.akka23
安装
首先你得安装Play!
以及MongoDB
。
play!的安装不必多说,下载安装SBT,去Play官网下载Activator
,添加环境变量,然后activator new
一个工程就可以了。
创建好mosquito-mongo工程目录如下:
MongoDB
的安装也很简单,去官网下载安装,然后添加环境变量就可以。不过需要注意,要自己指定数据存放位置。如,我将数据存放在D:\MongoDB\data
中,只需要在d:\
下MongoDB
与data
文件夹就行:
然后就可以这样启动:
到这里,play
与mongodb
就都已安装好了,接下来我们可以实现一个小的demo。
配置
添加play.plugins
插件。在项目根目录下的conf/
文件夹下,创建play.plugins
插件并加入
1100:play.modules.reactivemongo.ReactiveMongoPlugin
添加reactivemongo
依赖。打开项目根目录下build.sbt
,添加:
"org.reactivemongo" %% "play2-reactivemongo" % "0.10.5.0.akka23"
配置连接。打开项目根目录下的conf/
文件夹下application.conf
,加入:
# ReactiveMongomongodb.uri = "mongodb://localhost:27017/mosquito"mongo-async-driver {akka {
loglevel = DEBUG}
}
建立全局的Global
来获取connection。在app目录下创建Global.scala
文件,并添加:
package globalobject Global extends GlobalSettings {def db = ReactiveMongoPlugin.dbdef collection = db.collection[JSONCollection]("user")override def onStart(app: Application) {Logger.info("Application has started")}override def onStop(app: Application) {Logger.info("Application shutdown...")}
}
然后还需要在conf/文件夹下application.conf
,加入:
application.global=global.Global
到此,所有配置都已结束,接下来实现业务逻辑了。
实现
建立模型。根目录下建立models文件夹(如果没有的话),并建立User.scala
,并加入:
package modelsimport play.api.libs.json.Jsoncase class User(var id:Option[Long],var name:Option[String],var password:Option[String],var address :Option[String] = None)trait JSONFormats {implicit val UserFormats = Json.format[User]}
实现。在controllers/下的Application.scala
中加入以下代码:
package controllersimport akka.util.Timeout
import global.Global
import models.{JSONFormats, User}
import play.api.libs.concurrent.Execution.Implicits.defaultContext
import play.api.libs.json._
import play.api.mvc._import scala.concurrent.Await
import scala.concurrent.duration._// Reactive Mongo plugin, including the JSON-specialized collection
import play.modules.reactivemongo.MongoControllerobject Application extends Controller with MongoController with JSONFormats {implicit val timeout = Timeout(10 seconds)def index = Action {Ok(views.html.index("Your new application is ready."))}def add = Action { request =>request.body.asJson.get.validate[User] match {case s:JsSuccess[User] =>{val user = s.getGlobal.collection.insert(user)Ok(Json.obj("code" -> 200, "message" -> Json.toJson(user)))}case e:JsError => {InternalServerError(Json.obj("code" -> 500, "message" -> e.toString))}}}def query = Action.async {val userList = Global.collection.find(Json.obj()).cursor[User].collect[List](upTo = 100, stopOnError = true)userList.map(list => Ok(Json.obj("code" -> 200, "message" -> Json.toJson(list))))recover {case e : Exception => InternalServerError(Json.obj("code" -> 500, "message" -> JsNull))}}def retrieve(id:Int) = Action.async {val userOpt = Global.collection.find(Json.obj("id" -> id)).cursor[User].headOptionuserOpt.map(user => Ok(Json.obj("code" -> 200, "message" -> Json.toJson(user)))) recover {case e : Exception => InternalServerError(Json.obj("code" -> 500, "message" -> JsNull))}}def test = Action.async { request =>val reqJson = request.body.asJson.getval name = (reqJson \"name").asOpt[String]val password = (reqJson \"name").asOpt[String]val address = (reqJson \"address").asOpt[String]val idOpt = getIdval user = User(idOpt,name,password,address)Global.collection.insert(user).map(u => Ok(Json.obj("code" -> 200, "message" -> Json.toJson(user))))recover {case e : Exception => InternalServerError(Json.obj("code" -> 500, "message" -> "Oops"))}}def getId:Option[Long] = {var ret = None:Option[Long]val userList = Global.collection.find(Json.obj()).cursor[User].collect[List](upTo = 100, stopOnError = true)val lastUserOpt = Await.result(userList, timeout.duration).lastOptionif(lastUserOpt.isDefined){val id = lastUserOpt.get.id.get + 1ret= Option(id)}ret}}
说明。
- add 新增
- query 查询所有
- retrieve 查询单个(根据id查询)
- test 测试uid自增插入
- getId 获取最大uid传递给test(很low的方式,通过查询出最大的id再+1赋值)
配置路由。在conf/文件夹下的routes
中加入对应的路由:
GET /user/:id controllers.Application.retrieve(id:Int)
PUT /user controllers.Application.add
GET /query controllers.Application.query
PUT /test controllers.Application.test
总目录结构如下:
测试
最后是跑一下。运行起来后直接自动建库、建表。
运行成功。
测试一下查询。
测试一下新增(id自增)。
最后再查询全部。
Github源码
转载于:https://www.cnblogs.com/xjpz/p/4825855.html
Play Framework + ReactiveMongo 环境搭建相关推荐
- Robot Framework测试环境搭建(python3.7.2,pip在线安装)及RIDE的简单操作演示
Robot Framework测试环境搭建(python3.7.2,pip在线安装)和RIDE的简单操作演示 1.框架介绍 Robot Framework 框架是一个通用的测试框架(基于python) ...
- python2.x- selenium-robot framework自动化测试环境搭建
因为ride在开发的时候是基于python2.x开发的,虽然现在python已经出现了python3.x以上的版本,但是ride未和python3.x以上的版本有兼容. robot framework ...
- robot framework环境搭建
一. robot framework环境搭建: 官网:http://robotframework.org/ 序号 安装包名 安装方法 下载地址 备注 1 python exe文件,直接双击安装 htt ...
- robot framework环境搭建(转)
一. robot framework环境搭建: 官网:http://robotframework.org/ 序号 安装包名 安装方法 下载地址 备注 1 python exe文件,直接双击安装 htt ...
- Robot Framework + Selenium library + IEDriver环境搭建
转载:https://www.cnblogs.com/Ming8006/p/4998492.html#c.d 目录: 1 安装文件准备 2 Robot框架结构 3 环境搭建 3.1 安装Pytho ...
- WAMP + Zend Framework + Zend Studio For Eclipse 开发环境搭建
组件 WAMP Server (Windows + Apache + MySql + PHP) 版本: WampServer 2.0e 网站: http://www.wampserver.com/en ...
- Play Framework 2.5.x 测试环境搭建
Play Framework 2.5.x 测试环境搭建 目录 Play Framework 25x 测试环境搭建 目录 准备工作 目标 GO buildsbt conf TestGlobal 应用 t ...
- Play Framework 2.5 环境搭建与新建项目(二)
activator ui 方式 打开命令行窗口,输入以下命令: activator ui 浏览器中打开一个页面,类似于一个IDE,实际上也是一个网页版的IDE. 选择 Seeds->Play J ...
- ZF2入门:Windows环境下从零开始Zend Framework 2.0 (ZF2)环境搭建
一.Apache + MySQL + PHP5.4环境搭建 其实PHP5.4已经集成了Web服务器,但是为了更加简化,我在这里选择了集成安装包XAMPP来搭建环境. 安装 xampp-win32-1. ...
最新文章
- GitHub 上有个沙雕开发者,做了款斗图工具后火了...
- myeclipse 项目中jsp或者js 文件中的错误是没必要处理的,可以忽略
- python re模块下载_python re模块详解
- jQuery |添加标签元素/内容
- 武汉火神山医院正式交付,华为提供多项技术支持
- SQL还原数据库剔除占用
- AMD and CMD are dead之KMDjs内核之依赖分析
- C语言malloc函数
- 修改android设备型号
- USB-HID鼠标键盘驱动
- xxampp 配置php_MAC下使用XMAPP配置php环境
- 平面三角形外心坐标推导
- linux安装pcre错误,安装PCRE时出错
- 计网自顶向下 学习笔记:Chap1
- Espresso测试框架
- SAP ABAP ZBA_R003 查询用户下的角色里的公司
- Ora2Pg配置文件详解
- android-帧动画(原地不动人再走路)
- 团队博客-11月19日
- JAVA野人_修道野人 用谓词表示法表示修道士和野人的问题 在河的左岸有三个修道士 联合开发网 - pudn.com...