Spring-Boot 整合MongoDB

一、引入MongoDB依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

二、配置yml文件

#mongodb配置
spring:data:mongodb:host: 127.0.0.1 #指定MongoDB服务地址port: 27017 #指定端口,默认就为27017database: article #指定使用的数据库(集合)authentication-database: admin # 登录认证的逻辑库名username: admin #用户名password: abc123456 #密码# uri: mongodb://<username>:<password>@127.0.0.1:27017/test
#      uri: mongodb://@127.0.0.1:27017/test

三、编写IBasicDao公共类

package com.example.demomoudle.common;import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;import java.util.List;public interface IBasicDao<T> {/*** 查询数据** @param query* @return*/List<T> find(Query query);/*** 分页查询** @param query* @param start* @param size* @return*/List<T> findList(Query query, int start, int size);/*** 根据ID查询** @param id* @return*/T findOne(String id);/*** 插入一条数据** @param entity*/void insert(T entity);/*** 更新数据** @param query* @param update* @return*/UpdateResult update(Query query, Update update);/*** 根据实体类删除数据** @param entity* @return*/DeleteResult delete(T entity);/*** 根据query删除数据** @param query* @return*/DeleteResult remove(Query query);long count();long count(Query query);void save(T entity);List<T> findAll();List<T> findByKeyAndValue(String key, String Value);List<T> findByKeyAndValue(String key, String Value, int start, int limit);void upsert(Query query, Update update);MongoTemplate getMongoTemplate();}

四、编写BasicDao公共类

package com.example.demomoudle.common;import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
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 java.lang.reflect.ParameterizedType;
import java.util.List;public class BasicDao<T> implements IBasicDao<T> {private Class<T> clazz;public BasicDao() {ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();clazz = (Class<T>) type.getActualTypeArguments()[0];}@Autowiredprivate MongoTemplate mongoTemplate;@Overridepublic List<T> find(Query query) {return mongoTemplate.find(query, clazz);}@Overridepublic List<T> findList(Query query, int start, int size) {//按照id升序排序
//        query.with(Sort.by(Sort.Order.asc("_id")));//        改写了上面的方法, 注意观察是否会报错query.with(Sort.by(new Sort.Order(Sort.Direction.ASC, "_id"))).skip(start).limit(size);return mongoTemplate.find(query, clazz);}@Overridepublic T findOne(String id) {Query query = new Query();
//        query.addCriteria(Criteria.where("id").is(id));query.addCriteria(new Criteria("_id").is(id));return mongoTemplate.findOne(query, clazz);}@Overridepublic void insert(T entity) {mongoTemplate.insert(entity);}@Overridepublic UpdateResult update(Query query, Update update) {return mongoTemplate.updateMulti(query, update, clazz);}@Overridepublic DeleteResult delete(T entity) {return mongoTemplate.remove(entity);}@Overridepublic DeleteResult remove(Query query) {return mongoTemplate.remove(query, clazz);}public DeleteResult remove(String id) {Query query = new Query();query.addCriteria(Criteria.where("id").is(id));return mongoTemplate.remove(query, clazz);}@Overridepublic long count() {Query query = new Query();return mongoTemplate.count(query, clazz);}@Overridepublic long count(Query query) {return mongoTemplate.count(query, clazz);}@Overridepublic void save(T entity) {mongoTemplate.save(entity);}@Overridepublic List<T> findAll() {Query query = new Query();return find(query);}@Overridepublic List<T> findByKeyAndValue(String key, String Value) {Query query = new Query(Criteria.where(key).is(Value));return mongoTemplate.find(query, clazz);}@Overridepublic List<T> findByKeyAndValue(String key, String Value, int start, int limit) {Query query = new Query(Criteria.where(key).is(Value));query.skip(start).limit(limit);return mongoTemplate.find(query, clazz);}@Overridepublic void upsert(Query query, Update update) {mongoTemplate.upsert(query, update, clazz);}@Overridepublic MongoTemplate getMongoTemplate() {return mongoTemplate;}
}

五、新建实体类

package com.example.demomoudle.entity;import io.swagger.annotations.ApiModel;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;@ApiModel("用户管理表")
@Document(collection = "userTable")
public class User {@Idprivate String id;private String username;private String password;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

六、编写Service类和ServiceImpl实现类

package com.example.demomoudle.service;import com.example.demomoudle.common.IBasicDao;
import com.example.demomoudle.entity.User;public interface userService extends IBasicDao<User> {}
package com.example.demomoudle.service.impl;import com.example.demomoudle.common.BasicDao;
import com.example.demomoudle.service.userService;
import com.example.demomoudle.entity.User;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;@Service(value = "userService")
public class userServiceImpl extends BasicDao<User> implements userService {}

七、编写contronller类

package com.example.demomoudle.contronller;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.demomoudle.Tools.QueryTools;
import com.example.demomoudle.entity.User;
import com.example.demomoudle.service.impl.userServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
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.web.bind.annotation.*;import java.util.List;@Api(tags = "用户管理")
@RestController()
@RequestMapping("/user")
@CrossOrigin(value = "*", maxAge = 3600)
public class userController {@Autowiredprivate userServiceImpl userService;/*** 新增*/@ApiOperation("新增")@GetMapping("add")public void add(User user) {userService.insert(user);}/*** 修改*/@ApiOperation("修改")@PostMapping("update")public void update(@RequestParam("id") String id, @RequestBody User user) {Query query = new Query(Criteria.where("id").is(id));Update update = new Update();String str = JSON.toJSONString(user);JSONObject jQuery = JSON.parseObject(str);jQuery.forEach((key, value) -> {//因为id相当于传统数据库中的主键,这里使用时就不支持更新,所以需要剔除掉if (!key.equals("id")) {update.set(key, value);}});userService.update(query, update);}/*** 根据id查询*/@ApiOperation("根据ID查询")@GetMapping("findOne/{id}")public List<User> findOne(@PathVariable(name = "id") String id) {List<User> list = userService.find(QueryTools.getUserById(id));return list;}/*** 分页查询全部数据*/@ApiOperation("分页查询")@GetMapping("/find")public List<User> find(int start, int sum) {List<User> users = userService.find(QueryTools.findByPages(start, sum));return users;}/*** 根据Id删除*/@ApiOperation("删除")@GetMapping("delete")public void remove(String id) {userService.remove(QueryTools.removeById(id));}}

八、编写工具类,方便按照不同的查询条件生成Query

package com.example.demomoudle.Tools;import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;import java.util.HashMap;public class QueryTools {public static Query getUserById(String id) {Query query = new Query();query.addCriteria(Criteria.where("id").is(id));return query;}public static Query removeById(String id) {Query query = new Query();query.addCriteria(Criteria.where("id").is(id));return query;}public static Query findByPages(int start, int sum) {Query query = new Query();query.skip(start);query.limit(sum);return query;}public static Query getQueryByTitle(int page, int size, String title) {Query query = new Query();//设置起始query.skip(page - 1 * size);//设置条数query.limit(size);query.addCriteria(Criteria.where("title").regex(".*?" + title + ".*"));return query;}public static Query queryByParamsMap(HashMap<String, String> maps) {Query query = new Query();for (String key : maps.keySet()) {query.addCriteria(Criteria.where(key).is(maps.get(key)));}return query;}public static Query querySearch(String id, Integer page, Integer size, String evalue) {Query query = new Query();query.skip((page - 1) * size);query.limit(size);if (evalue.equals("yes") || evalue == "yes") {query.addCriteria(Criteria.where("props.score").exists(true));} else if (evalue.equals("no") || evalue == "no") {query.addCriteria(Criteria.where("props.score").exists(false));}query.addCriteria(Criteria.where("id").is(id));return query;}public static Query querySearchOr(String name, Long startTime, Long endTime) {Query query = new Query();Criteria criteria = new Criteria();Criteria criteriaOr = new Criteria();Criteria[] criterias = new Criteria[2];if (name != null) {criterias[0] = Criteria.where("showName").regex(".*?" + name + ".*");criterias[1] = Criteria.where("name").regex(".*?" + name + ".*");criteriaOr.orOperator(criterias);query.addCriteria(criteriaOr);}query.addCriteria(criteria.and("time").gte(startTime).lte(endTime));return query;}
}

Spring-Boot 整合MongoDB相关推荐

  1. Spring boot整合Mongodb

    最近的项目用了Mongodb,网上的用法大多都是七零八落的没有一个统一性,自己大概整理了下,项目中的相关配置就不叙述了,由于spring boot的快捷开发方式,所以spring boot项目中要使用 ...

  2. Spring Boot整合MongoDB实现增删改查

    MongoDB这两年来是本人一直使用较多的,之前的使用大多通过封装的工具类对数据库进行操作,虽然也算稳定,但有了Spring Boot之前的工具类直接加到SpringBoot里就没那么好使了,因此查阅 ...

  3. spring boot 整合mongoDb

    目录 1.MongoDB安装 2.具体简单应用 1.MongoDB安装和基础学习 具体参考:https://www.runoob.com/mongodb/mongodb-window-install. ...

  4. Spring Boot 整合——MongoDB整合3(MongoDB聚合操作)

    文章前面 关于版本 依赖 版本 springboot 2.0.8.RELEASE mongodb 4.0.14 本内容只是为了介绍mongodb最基础的使用以及配置,作为一个知名的数据库,其存在相当多 ...

  5. MongoDB简单入门篇及其Spring Boot整合

    参考视频 ① MongoDB简介 简介 MongoDB是为快速开发互联网Web应用而设计的数据库系统 MongoDB的设计目标是极简.灵活. 作为Web应用栈的一部分 MongoDB是No SQL数据 ...

  6. Spring Boot 整合——Spring Boot整合kafka整合

    Spring Boot 整合之前的内容 项目名称 描述 地址 base-data-mybatis 整合mybatis-plus(实际上官方教程已经很多,只做了自定义插件) 未完成 base-jpa J ...

  7. Spring Boot整合ActiveMQ及场景举例(点对点模式、订阅模式)

    目录 前序 为什么要引入MQ 注册案例--不使用MQ 注册案例--引入MQ(点对点模式) 注册案例--引入MQ(发布/订阅模式) 安装Active MQ 使用Spring Boot进行整合(点对点模式 ...

  8. 干货必看|Spring Boot整合MyBatis框架详解

    在开发中,我们通常会对数据库的数据进行操作,Sprirng Boot对关系型数据库和非关系型数据库的访问操作都提供了非常好的整合支持.所以今天壹哥就给大家讲解一下,如何在SpringBoot环境中整合 ...

  9. spring boot整合spring security笔记

    最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...

  10. RabbitMQ使用及与spring boot整合

    1.MQ 消息队列(Message Queue,简称MQ)--应用程序和应用程序之间的通信方法 应用:不同进程Process/线程Thread之间通信 比较流行的中间件: ActiveMQ Rabbi ...

最新文章

  1. 征途linux mysql_MySql征途之mysql常用命令
  2. 【实战】OpenCV钢管计数分析与方法比较
  3. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用
  4. ARMV8虚拟中断的介绍
  5. 黑马程序员pink老师前端入门教程,零基础必看的JavaScript基础语法视频教程(DOM,事件高级)
  6. Redis 实践笔记1---基础知识
  7. mysql同表字段前4位复制_MySQL不同表之前的字段复制
  8. numpy的常用函数 不断更新
  9. CSS样式之内容居中方法
  10. MySQL下bin-log的三种模式(ROW、Statement、Mixed)
  11. 1.6 语言模型和序列生成
  12. 《瓦尔登湖》 感想及笔记
  13. 【第五周课后作业】“番茄工作法”软件创新性分析
  14. Java RMI远程方法调用学习总结
  15. BERT模型自定义词汇以及token相关
  16. 常见的新算法的标准测试函数
  17. Java IO流复制文件拒绝访问的原因及解决方法
  18. 函数类型+WINAPI+函数名
  19. 用Java输出正方形,长方形
  20. opencv2 Mat类copyTo()函数的内存泄露问题

热门文章

  1. 模型越大表现越差,这个比赛悬赏25万美元找大模型不擅长的任务,去试试?...
  2. 论好用的云主机对于网站运营的重要性
  3. uva821网页跳跃
  4. 基于ROS实现的机器人运动PID控制器
  5. VS2015: warning MSB8012: TargetPath问题的解决
  6. matlab画二位温度场图(代码带注释)
  7. #来陀螺问答,问大V#项目方专场优质问答精选
  8. 《对位与赋格教程(杜布瓦)》读书笔记(二):二声部对位
  9. 转载:Linux下启动和关闭Weblogic(管理服务器+被管服务器)
  10. UnboundLocalError: local variable ‘a‘ referenced before assignment(Python报错解决)