在MongoDB中插入如下的数据

db.baike.insert(
{
_id: 'freemark',
desc: '新一代模板语言',
tag: [
'IT',
'模板语言'
],
comment: {
good: 56,
bad: 1
}
}
) db.baike.insert(
{
_id: 'springboot',
desc: '快速分布式开发框架',
tag: [
'IT',
'spring'
],
comment: {
good: 1256,
bad: 12
}
}
)

pom.xml

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

application.properties

#
server.address=0.0.0.0
server.port=8080
server.servlet.context-path=/test
server.session.timeout=300
server.error.path=/error
#
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.buffered=true
server.tomcat.accesslog.directory=D:/Project/JavaWeb/SpringBoot/04JPASpringBoot/logs
#
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=Asia/Shanghai
#
spring.thymeleaf.cache=true
spring.thymeleaf.enabled=true file.upload.path=D:/Project/JavaWeb/SpringBoot/04JPASpringBoot/fileUpLoad spring.servlet.multipart.enabled=true
spring.servlet.multipart.file-size-threshold=0
spring.servlet.multipart.location=D:/Project/JavaWeb/SpringBoot/04JPASpringBoot/temp
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
spring.servlet.multipart.resolve-lazily=false spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.one.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.druid.one.username=root
spring.datasource.druid.one.password=gis
spring.datasource.druid.one.driver-class-name=com.mysql.cj.jdbc.Driver ##Druid
spring.datasource.druid.one.initial-size=2
spring.datasource.druid.one.max-active=5
spring.datasource.druid.one.min-idle=1
spring.datasource.druid.one.max-wait=60000
spring.datasource.druid.one.pool-prepared-statements=true
spring.datasource.druid.one.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.one.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.one.validation-query-timeout=60000
spring.datasource.druid.one.test-on-borrow=false
spring.datasource.druid.one.test-on-return=false
spring.datasource.druid.one.test-while-idle=true
spring.datasource.druid.one.time-between-eviction-runs-millis=60000
spring.datasource.druid.one.min-evictable-idle-time-millis=100000
#spring.datasource.druid.one.max-evictable-idle-time-millis=
spring.datasource.druid.one.filters=stat,wall,log
spring.datasource.druid.one.logSlowSql=true spring.data.mongodb.uri=mongodb://zyx:gis@127.0.0.1:27017/geodb
logging.level.org.springframework.data=debug

启动类

package com.smartmap.sample.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement; import com.smartmap.sample.test.conf.DataSourceConfiguration; @EnableTransactionManagement
@SpringBootApplication
public class TestMongoDBApplication { public static void main(String[] args) {
SpringApplication.run(TestMongoDBApplication.class, args); }
}

实体类Baike

package com.smartmap.sample.test.entity;

import java.util.ArrayList;
import java.util.Date;
import java.util.List; public class Baike { private String id;
private String desc;
private List<String> tag = new ArrayList<String>();
private Comment comment = null;
private Date createDate = null;
private Date updateDate = null; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public List<String> getTag() {
return tag;
}
public void setTag(List<String> tag) {
this.tag = tag;
}
public Comment getComment() {
return comment;
}
public void setComment(Comment comment) {
this.comment = comment;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getUpdateDate() {
return updateDate;
} public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
} }

实体类Comment

package com.smartmap.sample.test.entity;

import java.util.ArrayList;
import java.util.Date;
import java.util.List; public class Baike { private String id;
private String desc;
private List<String> tag = new ArrayList<String>();
private Comment comment = null;
private Date createDate = null;
private Date updateDate = null; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getDesc() {
return desc;
} public void setDesc(String desc) {
this.desc = desc;
} public List<String> getTag() {
return tag;
} public void setTag(List<String> tag) {
this.tag = tag;
} public Comment getComment() {
return comment;
} public void setComment(Comment comment) {
this.comment = comment;
} public Date getCreateDate() {
return createDate;
} public void setCreateDate(Date createDate) {
this.createDate = createDate;
} public Date getUpdateDate() {
return updateDate;
} public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
} }

DAO类(强大的MongoTemplate)

package com.smartmap.sample.test.dao.impl;

import java.util.Date;
import java.util.List; import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.data.mongodb.core.DbCallback;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository; import com.mongodb.MongoException;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.smartmap.sample.test.dao.BaikeDao;
import com.smartmap.sample.test.entity.Baike; @Repository
public class BaikeDaoImpl implements BaikeDao {
private final String collectionName = "baike"; @Autowired
MongoTemplate mongoTemplate;

// 插入
public void insertBaike(Baike baike) {
baike.setCreateDate(new Date());
mongoTemplate.insert(baike, collectionName);
}

// 查找所有
public List<Baike> findAllBaike() {
return mongoTemplate.findAll(Baike.class);
}

// 按ID查询
public Baike findBaikeById(String id) {
return mongoTemplate.findById(id, Baike.class);
}

// 按嵌套属性查询
public List<Baike> queryBad(int bad) {
Criteria criteria = Criteria.where("comment.bad").gt(bad);
Query query = Query.query(criteria);
return mongoTemplate.find(query, Baike.class);
}

// 多条件查询
public List<Baike> queryBadAndGood(int bad, int good) {
Criteria criteriaBad = Criteria.where("comment.bad").gt(bad);
Criteria criteriaGood = Criteria.where("comment.good").lt(good);
criteriaBad.andOperator(criteriaGood);
Query query = Query.query(criteriaBad);
return mongoTemplate.find(query, Baike.class);
}

// 更新--原子操作
public Long addCommentGoodCount(String tag) {
Criteria criteria = Criteria.where("tag").in(tag);
Query query = Query.query(criteria);
Update update = new Update();
update.inc("comment.good", 1);
UpdateResult updateResult = mongoTemplate.updateMulti(query, update, Baike.class);
return updateResult.getModifiedCount();
}

// 分页查询
public List<Baike> findBaikeWithPager(String tag, long pageNum) {
Criteria criteria = Criteria.where("tag").in(tag);
Query query = Query.query(criteria);
// 查询总数
long totalCount = mongoTemplate.count(query, Baike.class);
int numOfPage = 10;
long totalPage = totalCount / numOfPage;
if (totalCount % numOfPage != 0) {
totalPage++;
}
if (pageNum > totalPage) {
pageNum = totalPage;
}
// 取出分页的数据
long skip = (pageNum - 1) * numOfPage;
query.skip(skip).limit(numOfPage);
return mongoTemplate.find(query, Baike.class);
} public long updateBaike(Baike baike) {
baike.setUpdateDate(new Date());
Criteria criteria = Criteria.where("_id").is(baike.getId());
Query query = Query.query(criteria);
// 多字段更新
Update update = new Update().set("createDate", baike.getCreateDate()).set("desc", baike.getDesc());
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Baike.class, collectionName);
return updateResult.getModifiedCount();
}

// 删除
public long deleteBaike(String id) {
Baike baike = new Baike();
baike.setId(id);
DeleteResult deleteResult = mongoTemplate.remove(baike, collectionName);
return deleteResult.getDeletedCount();
}

// 通过调用Mongodb原生的API查询
public Baike findBaikeByIdWithNative(String id) {
final String objectId = id;
Baike baike = mongoTemplate.execute(new DbCallback<Baike>() {
@Override
public Baike doInDB(MongoDatabase mongoDatabase) throws MongoException, DataAccessException {
MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);
Document document = new Document("_id", objectId);
MongoCursor<Document> cursor = collection.find(document).iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
return null;
} });
return baike;
} }

Service类

package com.smartmap.sample.test.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.smartmap.sample.test.dao.BaikeDao;
import com.smartmap.sample.test.entity.Baike;
import com.smartmap.sample.test.service.BaikeService; @Service
public class BaikeServiceImpl implements BaikeService {
@Autowired
BaikeDao baikeDao; public List<Baike> findAllBaike() {
return baikeDao.findAllBaike();
} public Baike findBaikeById(String id) {
return baikeDao.findBaikeById(id); } public List<Baike> findBaikeWithPager(String tag, long pageNum) {
return baikeDao.findBaikeWithPager(tag, pageNum);
} public Baike insertBaike(Baike baike) {
baikeDao.insertBaike(baike);
return baike;
} public long updateBaike(Baike baike) {
return baikeDao.updateBaike(baike);
} public long deleteBaike(String id) {
return baikeDao.deleteBaike(id);
}
}

Controller类

package com.smartmap.sample.test.controller.rest;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import com.smartmap.sample.test.entity.Baike;
import com.smartmap.sample.test.service.BaikeService; @RestController
@RequestMapping("/api/v1.1/system/baike")
public class BaikeRestController {
private final Log logger = LogFactory.getLog(BaikeRestController.class);
@Autowired
private BaikeService baikeService; /**
* 查询所有用户
*
* curl -XGET 'http://127.0.0.1:8080/test/api/v1.1/system/baike/'
*
* @return
*/
@GetMapping("/")
public List<Baike> getAllBaikes() {
return baikeService.findAllBaike();
} /**
* 根据Id查询用户
*
* curl -XGET 'http://127.0.0.1:8080/test/api/v1.1/system/baike/springboot'
*
* @param baikeId
* @return
*/
@GetMapping("/{baikeId}")
public Baike getBaikeById(@PathVariable("baikeId") String baikeId) {
return baikeService.findBaikeById(baikeId);
} /**
* 翻页查询用户
*
* curl -XGET 'http://127.0.0.1:8080/test/api/v1.1/system/baike/query?pageNum=1&tag=spring'
*
* @param offset
* @param limit
* @param sortBy
* @param sortOrder
* @return
*/
@GetMapping("/query")
public List<Baike> queryBaikeById(@RequestParam("tag") String tag, @RequestParam("pageNum") long pageNum) {
logger.info(String.valueOf(tag));
logger.info(String.valueOf(pageNum));
return baikeService.findBaikeWithPager(tag, pageNum);
} /**
* 添加用户
*
* curl -XPOST 'http://127.0.0.1:8080/test/api/v1.1/system/baike/' -H'Content-type:application/json;charset=UTF-8' -d '
{
"id": "hadoop",
"desc": "bigdata framework",
"tag": [
"IT",
"bigdta"
],
"comment": {
"good": 3254,
"bad": 25
}
}'
*
* @param baike
* @return
*/
@PostMapping("/")
public int addBaike(@RequestBody Baike baike) {
System.out.println(baike.getId());
baikeService.insertBaike(baike);
return 1;
} /**
* 更新用户
*
* curl -XPUT 'http://127.0.0.1:8080/api/v1.1/system/baike/'
* -H'Content-type:application/json;charset=UTF-8' -d ' { "id": "123",
* "name":"123" } '
*
* @param baike
* @return
*/
@PutMapping("/")
public long updateUse(@RequestBody Baike baike) {
return baikeService.updateBaike(baike);
} /**
* 删除用户
*
* curl -XDELETE 'http://127.0.0.1:8080/api/v1.1/system/baike/123'
*
* @param baikeId
* @return
*/
@DeleteMapping("/{baikeId}")
public String deleteBaike(@PathVariable("baikeId") String baikeId) {
if (baikeService.deleteBaike(baikeId) > 0) {
return "{success:true, message:'delete success'}";
} else {
return "{success:false, message:'delete fail'}";
}
} }

Spring Boot—17MongoDB的更多相关文章

  1. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  2. 【微框架】之一:从零开始,轻松搞定SpringCloud微框架系列--开山篇(spring boot 小demo)

    Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...

  3. 玩转spring boot——开篇

    很久没写博客了,而这一转眼就是7年.这段时间并不是我没学习东西,而是园友们的技术提高的非常快,这反而让我不知道该写些什么.我做程序已经有十几年之久了,可以说是彻彻底底的“程序老炮”,至于技术怎么样?我 ...

  4. 玩转spring boot——结合redis

    一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...

  5. 玩转spring boot——AOP与表单验证

    AOP在大多数的情况下的应用场景是:日志和验证.至于AOP的理论知识我就不做赘述.而AOP的通知类型有好几种,今天的例子我只选一个有代表意义的“环绕通知”来演示. 一.AOP入门 修改“pom.xml ...

  6. 玩转spring boot——结合JPA入门

    参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...

  7. 玩转spring boot——结合JPA事务

    接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  8. 玩转spring boot——结合AngularJs和JDBC

    参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...

  9. 玩转spring boot——结合jQuery和AngularJs

    在上篇的基础上 准备工作: 修改pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

随机推荐

  1. css 题目笔记(本文收集了一些个人觉得比较有意思的css题目,欢迎大家给出自己的解答)

    1.本文收集了一些个人觉得比较有意思的css题目,欢迎大家给出自己的解答 P标签的最大宽度不可以大于H2标签文字宽度的10% 这里应该是P标签的最大宽度由前面的匿名内联元素宽度(就是大字号文字宽度)决 ...

  2. 【bzoj3224】【Tyvj 1728】 普通平衡树 树状数组

    您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入$x$数2. 删除$x$数(若有多个相同的数,因只删除一个)3. 查询$x$数的排名(若有多个相同的数,因输出最小 ...

  3. 移动端h5直播项目|html5直播实战开发|h5仿陌陌

    最近一些直播.小视频什么的都比较火,像陌陌.抖音.火山短视频… 于是空闲时间自己也利用html5技术也试着倒腾了下直播项目,使用到了h5+css3+iscroll+zepot+swiper+wlsPo ...

  4. 钉钉h5项目实战|仿钉钉聊天|h5移动端钉钉案例

    最近一直着手开发h5仿钉钉项目,使用到了h5+css3+zepto+wcPop2等技术进行开发,实现了消息.表情.动图发送,仿QQ多人拼合图像,可以选择本地图片,并可以图片.视频预览,仿微信发红包及打 ...

  5. IOC容器02

    获取xml文件路径,使用IO读取xml文件,使用Document对象解析xml文件,将xml中的bean的信息注册到BeanDefinition类,将BeanDefinition保存到一个map中:该 ...

  6. 微信小程序web-view(webview) 嵌套H5页面 唤起微信支付的实现方案

    场景:小程序页面有一个web-view组件,组件嵌套的H5页面,要唤起微信支付. 先讲一下我的项目,首先我是自己开发的一个H5触屏版的商城系统,里面含有购物车,订单支付等功能.然后刚开始,我们公众号里 ...

  7. tensorflow初次接触记录,我用python写的tensorflow第一个模型

    tensorflow初次接触记录,我用python写的tensorflow第一个模型 刚用python写的tensorflow机器学习代码,训练60000张手写文字图片,多层神经网络学习拟合17000 ...

  8. 1301班 github安装及账户注册

    1.下载github 下载地址: http://git-scm.com/download/ 2.账号注册 进入:mukever.online 在右下角的“New user? Create an acc ...

  9. 漫谈NIO(3)之Netty实现

    1.前言 上一章结合Java的NIO例子,讲解了多路IO复用的一个基本使用方法,通过实际编码加深对其理解.本章开始进入Netty的环节,前面两章都是为了Netty进行铺垫说明.此节将对比Java的NI ...

  10. Eclipse调用hadoop2运行MR程序(转)

    hadoop:hadoop2.2 ,windows myeclipse环境: Eclipse调用hadoop运行MR程序其实就是普通的java程序可以提交MR任务到集群执行而已.在Hadoop1中,只 ...