MongoTemplate增删改查排序实例干货

MongoTemplate是数据库和代码之间的接口,对数据库的操作都在它里面

一、配置环境:添加依赖、注入MongoTemplate

1、pom.xml中添加依赖

<!-- springboot 整合 mongodb   -->
<dependency> 
	  <groupId>org.springframework.boot</groupId>
	  <artifactId>spring-boot-starter-data-mongodb</artifactId>
	  <version>2.0.0.RELEASE</version>
</dependency>

2、注入MongoTemplate

@Autowired
private MongoTemplate mongoTemplate;

二、插入(新增):使用insert或save插入数据

1、insert:若新增数据的主键已经存在,则会抛DuplicateKeyException 异常提示主键重复,不保存当前数据。

   a)单个插入:mongoTemplate.insert(obj);

//使用insert方法插入Student对象
@Override
public void test(Student student) {		
	mongoTemplate.insert(student);		
}

   b)批量插入:insert批量插入不用遍历,效率高


List<Student> stuList = new ArrayList<>();
stuList.add(new Student(1,"胡歌","男"));
stuList.add(new Student(2,"刘亦菲","女"));
stuList.add(new Student(3,"易烊千玺","男"));
stuList.add(new Student(4,"沈腾","男"));
stuList.add(new Student(5,"陈钰琪","女"));
mongoTemplate.insert(stuList, "stuList");

2、save:若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。

   a)单个插入:mongoTemplate.save(obj);

//使用save方法插入Student对象
@Override
public void test(Student student) {		
	mongoTemplate.save(student);		
}

三、查询:

1、查询全部

@Override
public List<Student> findAll() {	
	return mongoTemplate.findAll(Student.class);
}

2、查询一条数据

//根据name名字字段来查询
@Override
public Student find(String name) {
	Query query=new Query();//创建query对象,用来添加过滤条件
	//查询name为李四的文档
	//这里的where,相当于MySQL中的where,用来过滤信息的
	query.addCriteria(Criteria.where("name").is(name));
	return mongoTemplate.findOne(query,Student.class);
}

3、多条件查询

@Override
public User login(User user) {
		//根据名字和密码进行查询
		Criteria criatira = new Criteria();
		criatira.andOperator(Criteria.where("user_name").is(user.getUserName()),Criteria.where("password").is(user.getPassword()));
		return mongoTemplate.findOne(new Query(criatira),User.class);
}

4、左右模糊查询用regex方法

//按照姓名模糊查询
@Override
public Student find(String name) {
	Query query=new Query();
	Pattern pattern=Pattern.compile("^.*"+name+".*$", Pattern.CASE_INSENSITIVE);
query.addCriteria(Criteria.where("name").regex(pattern))return mongoTemplate.findOne(query,Student.class);
}

四、修改:

1、修改一个字段

//根据name名字字段来修改sex性别的值
@Override
public void updateStatu(Student student) {
	Query query=new Query();
	query.addCriteria(Criteria.where("name").is(student.getName()));
	Update update = Update.update("sex", student.getSex());
	mongoTemplate.updateMulti(query,update,Student.class);
}

2、修改多个字段

//根据DsAudit集合(表)的id字段
@Override
public void updateData(Student student) {
	Query query=new Query();
	//对id为3的文档进行修改
	query.addCriteria(Criteria.where("_id").is(3));
	Update update = new Update();//update对象是用来进行修改操作的
	//修改名字Name字段的值为张三,性别为男
	update.set("Name", "张三");
	update.set("sex", "男");
	mongoTemplate.updateFirst(query, update, Student.class);
}

五、删除:

1、根据字段来删除

//删除_id为3的文档
@Override
public void delete(Student student) {	
	Query query = new Query(Criteria.where("_id").is("3"));	
	mongoTemplate.remove(query, Student.class);		
}

六、排序:

1、查询全部信息并排序:

//查询全部并根据id字段降序
@Override
public List<Student> findAll() {
	Query query = new Query();
	//根据id字段来排序,如果想根据多个字段进行排序,可以在str字符串数组中添加字段
	String[] str= {"id"};
	query.with(Sort.by(Sort.Direction.DESC,str));//DESC降序,ASC是升序
	return mongoTemplate.find(query,Student.class);
}

2、根据条件查询并排序:

//根据名字字段查询并根据id字段进行降序
@Override
public List<Student> find(String name) {
	Query query=new Query();
	query.addCriteria(Criteria.where("name").is(name)).with(Sort.by(Sort.Order.desc("id")));
	return mongoTemplate.find(query,Student.class);
}

七、Query和Criteria、Sort用法

1、Query: 定义筛选条件、排序等
在这里插入图片描述
2、Criteria:相当于SQL的where,下面是Criteria常用方法及作用
在这里插入图片描述
3、Sort:创建查询排序
在这里插入图片描述

八、实体类主键和别名

注解@Id,数据库中的主键字段名为_id

//用户名
@Id
private String user_name;

别名用@Field注解,数据库中的字段名为fName,而不是user_name

@Field("fName")   
 private String user_name;

欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感谢。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值