mongoTemplate + Java 增删改查基础介绍

MongoDB是一款非常优秀的文档型数据库,主要以Bejson数据结构来存储数据,在某些场景下比主流关系型数据库mysql更适合业务场景。

换句话说对事务和数据严谨性要求不高的场景,比如用户评论 点赞、短信、日志和一些并发低不要求事务的实际业务等等,都可以使用mongo数据库。

一、集成springboot

java 复制代码
<dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-mongodb</artifactId>
 </dependency>

springboot全家桶非常好的集成了MongoDB,只需要引入依赖包,即可引入

mongoTemplate对增删改查操作都做了封装,基本上拿来即用,只需要熟练掌握其中具体操作步骤即可轻松掌握mongo

java 复制代码
@Resource
private MongoTemplate mongoTemplate;

二、使用

核心掌握增删改查四大方法

1、查询

(1)、普通查询

查询单个数据,使用Criteria来添加条件,使用findOne(条件query,返回值类型,表名)来执行查询,无需写具体查询语句;

java 复制代码
Query q= new Query();

q.addCriteria(Criteria.where("user_name").is("小王"));

q.fields().exclude("_id").include("content");

//确定结果为1个时,如使用id查询,使用findOne

JSONObject JS =  mongoTemplate.findOne(q, JSONObject.class,CommonConts.users);

//当结果可能为多个时,使用find

List<JSONObject> list=  mongoTemplate.find(q, JSONObject.class,CommonConts.users);

(2)、复杂查询

假设存在一张用户表user,有三个字段 user_name age和sex,则可以执行以下查询

下面这个例子完整展示了使用来Aggregation进行复杂查询

默认分页对象:

java 复制代码
public class Page{

   private int pageSize;

   private int startPage;

   private Long totalResult;

}

查询示例:

java 复制代码
public List<JSONObject> queryTest(String params,Page page) {



Criteria c = new Criteria();



JSONObject JSON = MyUtils.fromJson(params);



//1、 通过user_name模糊查询

List<Criteria> cl = new ArrayList<>();



Criteria c1 = Criteria.where("user_name") .regex(Pattern.compile("^.*" + JSON.opt("user_name") + ".*$",                 

 Pattern.CASE_INSENSITIVE));



 cl.add(c1);



//2、判断是否存在某个查询条件

if (MyUtils.isNotNull(JSON.opt("sex"))) {

Criteria c2 = Criteria.where("sex").is(JSON.opt("sex"));

cl.add(c2);

}

if (MyUtils.isNotNull(JSON.opt("age"))) {

Criteria c3 = Criteria.where("age").is(JSON.opt("age"));

cl.add(c3);

}

//3、将所有的条件合并到一起,注意这里使用andOperator是并查询操作,使用orOperator则是或查询操作

c.andOperator(cl.toArray(new Criteria[0]));



//4、执行查询,

Aggregation agg = Aggregation.newAggregation(Aggregation.match(c),



Aggregation.project().and(ConvertOperators.Convert.convertValueOf("_id").to("string")).as("id")



.andExclude("_id").and("user_name").as("user_name").and("sex")



.as("sex").and("age").as("age"),



Aggregation.sort(new Sort(Sort.Direction.DESC, "age")),//根据年龄大小排序

     // 进行分页配置

     Aggregation.skip(page.getPageSize() * (page.getStartPage() - 1)),

     Aggregation.limit(page.getPageSize().intValue()));

AggregationResults<JSONObject> res= mongoTemplate.aggregate(agg, "user",



JSONObject.class);



return res.getMappedResults();

}

注意:关于查询还有其他内容比如关联、id处理、查询count等将在其他文章讲解

2、新增

使用insert 来执行新增操作,插入对象可以是JSON、对象实体、map等,当为集合时,则批量插入。插入成功后,数据库会存在一条数据,并且会自动生成一个_id字段

java 复制代码
JSONObject json =new JSONObject();

json.put("user_name", "小王");

json.put("age", 18);

json.put("sex","男");

mongoTemplate.insert(json, "user");

注意:MongoDB表不用先建表然后再执行插入操作,可以直接进行插入操作,当不存在表时候会自动建表,然后再执行插入操作。另外,使用mongoTemplate来插入数据时候,如果想要获取_id值,可以使用对象插入如:

java 复制代码
public void testInsert(){

   User user =new User();

   user.setName("小王");

  mongoTemplate.insert(json, "user");

}

3、修改

使用findAndModify来执行修改操作,四个参数分别是修改条件、修改内容、返回值和表

java 复制代码
String id="1223ss";

Query q = new Query();

q.addCriteria(Criteria.where("_id").is(id);

Update u = new Update();

u.set("user_name","小章");

u.set("age",28);

mongoTemplate.findAndModify(q, u, JSONObject.class, "user");

4、删除

使用findAndRremove来执行删除操作,参数分别对应为:删除条件,返回值和表

java 复制代码
String id="1223ss";

Query q = new Query();

q.addCriteria(Criteria.where("_id").is(id);

mongoTemplate.findAndRemove(q, JSONObject.class, "user");
相关推荐
小小小米粒2 小时前
redis命令集合
数据库·redis·缓存
herinspace3 小时前
管家婆实用贴-如何分离和附加数据库
开发语言·前端·javascript·数据库·语音识别
叶小鸡3 小时前
小鸡玩算法-力扣HOT100-堆
数据结构·算法·leetcode
步辞4 小时前
Go语言怎么用channel做信号通知_Go语言channel信号模式教程【完整】
jvm·数据库·python
weixin_424999364 小时前
mysql行级锁失效的原因排查_检查查询条件与执行计划
jvm·数据库·python
Polar__Star4 小时前
uni-app怎么实现App端一键换肤 uni-app全局样式动态切换【实战】
jvm·数据库·python
LUVK_5 小时前
第七章查找
数据结构·c++·考研·算法·408
khalil10205 小时前
代码随想录算法训练营Day-31贪心算法 | 56. 合并区间、738. 单调递增的数字、968. 监控二叉树
数据结构·c++·算法·leetcode·贪心算法·二叉树·递归
南境十里·墨染春水5 小时前
linux学习进展 进程间通讯——共享内存
linux·数据库·学习