Java实习经历之项目中MongoTemplate的实战应用

进入公司两个星期后,终于可以接触到公司的项目了,发现项目中dao实现层的方法都是用封装起来的MongoTemplate的模板,根本不用自己写mongoDB的语句,今天我就为大家来介绍一下MongoTemplate里面的增删改查的使用。 有兴趣学习MongoDB基础的小伙伴可以去菜鸟教程里进行学习,网址https://www.runoob.com/mongodb/mongodb-tutorial.html 先来介绍一下MongoDB里面封装好的Criteria对象,这个对象十分有用,它可以用来设置查询条件,下面会通过代码一一介绍到

1.条件查询:
// 先实例化一个查询对象,参数为一个Criteria对象
Query query = new Query(criteria );

// 再实例化一个条件对象
Criteria criteria = new Criteria();

// 相当于sql:where id = id
criteria = Criteria.where("id").is(id);

// 把query对象和要进行操作的实体类作为参数,find方法为mongoTemplate封装的查询方法
return this.mongoTemplate.find(query,aaa.class);
	

2.模糊查询

// 先实例化一个查询对象,参数为一个Criteria对象
Query query = new Query(criteria );

// 再实例化一个条件对象
Criteria criteria = new Criteria();

// 使用正则表达式实现分词
Pattern pattern = Pattern.compile("^.*" + projectName.toString() + ".*$", Pattern.CASE_INSENSITIVE);

// regex方法相当于sql的like条件
criteria = Criteria.where("project_name").regex(pattern);

// 把query对象和要进行操作的实体类作为参数,find方法为mongoTemplate封装的查询方法
return this.mongoTemplate.find(query, aaa.class);

3.分页查询

// 先实例化一个查询对象,参数为一个Criteria对象
Query query = new Query(criteria);

// 再实例化一个条件对象
Criteria criteria = new Criteria();

// skip():跳过指定数量的数据;注意需要传入每页的大小和当前页数的参数
criteria.skip(pageSize*(pageNo-1));

//读取的记录条数
criteria.limit(pageSize);

// 把query对象和要进行操作的实体类作为参数,find方法为mongoTemplate封装的查询方法
return this.mongoTemplate.find(query, aaa.class);

4.对查询进行排序

// 先实例化一个查询对象
Query query = new Query();

// 实例化一个排序对象,参数为排序顺序,和对哪个字段进行排序
Sort sort = new Sort(Sort.Direction.DESC,"id");

// 把sort对象加入query对象中
query.with(sort);

// 把query对象和要进行操作的实体类作为参数,find方法为mongoTemplate封装的查询方法
return this.mongoTemplate.find(query,aaa.class);

5.查询总数:

// 实例化Criteria,相当于where id = id;
Criteria criteria= Criteria.where("id").is(id);

// 先实例化一个查询对象,参数为一个Criteria对象
Query query=new Query(criteria);

//count():查询记录总数
return this.mongoTemplate.count(query, StarLinkOperateLog.class);

6.新增:新增就比较简单了,下面说一下insert和save的区别:
1)插入重复数据时:
  insert: 若新增数据的主键已经存在,则会抛 DuplicateKeyException 异常提示主键重复,不保存当前数据。
  save: 若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。

2)批操作时:
  insert: 可以一次性插入一整个列表,不用进行遍历操作,效率相对较高。
  save: 需要遍历列表,进行一个个的插入,效率相对较低。
代码:

// 插入一条数据
return mongoTemplate.insert(新增的对象);

// 插入多条数据
return mongoTemplate.insertAll(新增的对象列表);

7.更新操作:
更新操作有以下的方法,我就不一一演示了:
1)updateFirst 更改符合条件的第一个记录;
2)updateMulti 如果根据查询条件找到对应的多条记录,则会全部更新;
3)upsert 相当于 update+insert 如果根据条件没有对应的数据,则会进行插入操作;
4)findAndModify 查询然后更新;

// 实例化一个Query对象,传入条件对象参数
Query query = new Query(criteria);

// 根据id进行条件查询
Criteria criteria = Criteria.where("id").is(id);

// 实例化一个update对象
Update update = new Update();

// 指定需要更改的字段,设置新值
update.set("username","the new username");

// 传入需要的参数
return this.mongoTemplate.updateFirst(query,update,aaa.class);

8.删除操作:
1)根据条件删除:

// 实例化一个Query对象,传入条件对象参数
Query query = new Query(criteria);

// 实例化一个条件对象
Criteria criteria = Criteria.where("id").is(id);

// 调用remove方法传入条件和进行操作的实体类
return this.mongoTemplate.remove(query,aaa.class);

下面补充两种删除方法说明:
1)findAndRemove:查询出符合条件的第一个结果,并将符合条件的数据删除而且只会删除第一条;

2)findAllAndRemove:查询出符合条件的所有结果,并将符合条件的所有数据删除;

mongoTemplate的大部分操作我都做了示范了,当然公司里还有许多复杂的操作,我以后还会一一的跟大家分享,大家可以来学习一下。

你可能感兴趣的:(Java实习经历之项目中MongoTemplate的实战应用)