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:\MongoDBdata文件夹就行:

然后就可以这样启动:

到这里,playmongodb就都已安装好了,接下来我们可以实现一个小的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 环境搭建相关推荐

  1. Robot Framework测试环境搭建(python3.7.2,pip在线安装)及RIDE的简单操作演示

    Robot Framework测试环境搭建(python3.7.2,pip在线安装)和RIDE的简单操作演示 1.框架介绍 Robot Framework 框架是一个通用的测试框架(基于python) ...

  2. python2.x- selenium-robot framework自动化测试环境搭建

    因为ride在开发的时候是基于python2.x开发的,虽然现在python已经出现了python3.x以上的版本,但是ride未和python3.x以上的版本有兼容. robot framework ...

  3. robot framework环境搭建

    一. robot framework环境搭建: 官网:http://robotframework.org/ 序号 安装包名 安装方法 下载地址 备注 1 python exe文件,直接双击安装 htt ...

  4. robot framework环境搭建(转)

    一. robot framework环境搭建: 官网:http://robotframework.org/ 序号 安装包名 安装方法 下载地址 备注 1 python exe文件,直接双击安装 htt ...

  5. Robot Framework + Selenium library + IEDriver环境搭建

    转载:https://www.cnblogs.com/Ming8006/p/4998492.html#c.d 目录: 1 安装文件准备 2 Robot框架结构 3 环境搭建   3.1 安装Pytho ...

  6. WAMP + Zend Framework + Zend Studio For Eclipse 开发环境搭建

    组件 WAMP Server (Windows + Apache + MySql + PHP) 版本: WampServer 2.0e 网站: http://www.wampserver.com/en ...

  7. Play Framework 2.5.x 测试环境搭建

    Play Framework 2.5.x 测试环境搭建 目录 Play Framework 25x 测试环境搭建 目录 准备工作 目标 GO buildsbt conf TestGlobal 应用 t ...

  8. Play Framework 2.5 环境搭建与新建项目(二)

    activator ui 方式 打开命令行窗口,输入以下命令: activator ui 浏览器中打开一个页面,类似于一个IDE,实际上也是一个网页版的IDE. 选择 Seeds->Play J ...

  9. ZF2入门:Windows环境下从零开始Zend Framework 2.0 (ZF2)环境搭建

    一.Apache + MySQL + PHP5.4环境搭建 其实PHP5.4已经集成了Web服务器,但是为了更加简化,我在这里选择了集成安装包XAMPP来搭建环境. 安装 xampp-win32-1. ...

最新文章

  1. GitHub 上有个沙雕开发者,做了款斗图工具后火了...
  2. myeclipse 项目中jsp或者js 文件中的错误是没必要处理的,可以忽略
  3. python re模块下载_python re模块详解
  4. jQuery |添加标签元素/内容
  5. 武汉火神山医院正式交付,华为提供多项技术支持
  6. SQL还原数据库剔除占用
  7. AMD and CMD are dead之KMDjs内核之依赖分析
  8. C语言malloc函数
  9. 修改android设备型号
  10. USB-HID鼠标键盘驱动
  11. xxampp 配置php_MAC下使用XMAPP配置php环境
  12. 平面三角形外心坐标推导
  13. linux安装pcre错误,安装PCRE时出错
  14. 计网自顶向下 学习笔记:Chap1
  15. Espresso测试框架
  16. SAP ABAP ZBA_R003 查询用户下的角色里的公司
  17. Ora2Pg配置文件详解
  18. android-帧动画(原地不动人再走路)
  19. 团队博客-11月19日
  20. JAVA野人_修道野人 用谓词表示法表示修道士和野人的问题 在河的左岸有三个修道士 联合开发网 - pudn.com...

热门文章

  1. Hadoop集群常用命令
  2. BiLSTM-CRF模型中的CRF层讲解
  3. Project Euler 66: Diophantine equation
  4. Linux高性能网络:协程系列01-前言
  5. Django 实现用户认证set_Cookie
  6. MongoDB学习:关闭mongod方式
  7. 五分钟深入 Hadoop 内核
  8. vim中设置tab的长度的方法
  9. ExtJS 3.2 学习笔记(1)
  10. 解析Disruptor:写入ring buffer