spring操作mongodb时MongoTemplate的基本使用(增删改查批量操作)

配置文件请查看:springMVC+MongoDB配置

springmvc+mongodb实现登录注册增删改查:https://blog.csdn.net/qq_39329616/article/details/88046135

下面是测试类,方法收集于《MongoDB游记》和互联网,如有侵权请联系我及时删除

import java.util.ArrayList;
import java.util.List;


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import net.fuzui.pojo.User;

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;

/**
 * @author fuzui
 * @date 2019年2月24日 下午4:09:02
 * 
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:config/spring/applicationContext.xml"})
public class mongoTemplateTest {
	@Autowired
	MongoTemplate mongoTemplate;

	/**
	 * 一、save方法
	 * 遍历插入
	 * 若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作
	 * */
	@Test
	public void saveTest() {
		User user = new User();
		user.setName("wwze01");
		user.setUsername("wwze01");
		user.setPassword("123456");
		System.out.println(mongoTemplate);
		
		mongoTemplate.save(user);	
	}

	/**
	 * 二、insert方法
	 * 一次性插入一整个列表,而不用进行遍历操作,效率相对较高
	 * 若新增数据的主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常提示主键重复,不保存当前数据。
	 * */
	@Test
	public void insertTest() {
		User user = new User();
		user.setName("wwze02");
		user.setUsername("wwze02");
		user.setPassword("123");
		System.out.println(mongoTemplate);

		mongoTemplate.insert(user);	
	}
	
	/**
	 * 三、批量插入
	 * 
	 * */
	@Test
	public void insertAllTest() {
		ArrayList<User> manyUser = new ArrayList<>();
		User user1 = new User();
		user1.setName("wwze03");
		user1.setUsername("wwze03");
		user1.setPassword("1234");
		manyUser.add(user1);
		User user2 = new User();
		user2.setName("wwze04");
		user2.setUsername("wwze04");
		user2.setPassword("12345");
		manyUser.add(user2);
		mongoTemplate.insertAll(manyUser);
	}
	
	/**
	 * 四、插入嵌套文档
	 * 这种复杂的数据结构如果直接使用javabean是比较麻烦的,这种比较复杂的数据结构,
	 * 只需要拿到json字符串,并将其转换成json对象,即可直接插入到mongodb中
	 * */
	@Test
	public void insertNestTest(){ 
		String classStr = "{'classId':'1','Students':[{'studentId':'1','name':'zhangsan'}]}";
		JSONObject parseObject = JSON.parseObject(classStr);
    	mongoTemplate.insert(parseObject,"class");//class为collection
	}
	
	/**
	 * 五、更新数据
	 * upsert和updateFirst、updateMulti
	 * */
	@Test
	public void update() {
		Query query = new Query();
		
		//Criteria.where(属性名).后可跟lt lte gt gte等
		query.addCriteria(Criteria.where("classId").is("1"));
		Update update = new Update();
		update = Update.update("teacher","WANGZE");
		mongoTemplate.upsert(query, update, "fuzui");
		
		/*
		 * upsert方法时如果query条件没有筛选出对应的数据,那么upsert会插入一条新的数据,而update什么都不会做
		 * 等同于关系型数据库中的merge和update。
		mongoTemplate.updateFirst(query, update, "class");
		mongoTemplate.updateMulti(query, update, "class");
		*/	
	}
	
	/**
	 * 六、添加嵌套文档中的数据
	 * addToSet方法:如果要插入的数据已经存在,则不进行任何操作;
	 * push方法:即使要插入的数据已存在,但仍要插入一条一样的数据。
	 * */
	@Test
	public void addNestTest() {
		Query query = Query.query(Criteria.where("classId").is("1"));
		User user = new User("1","wwze05","wwze05","123");
		Update update = new Update();
		
		update.push("Students",user);
		//update.addToSet("Students", user);
		mongoTemplate.upsert(query, update, "fuzui");
	}
	
	/**
	 * 七、修改内嵌文档中的数据
	 * 使用.$.连接
	 * 只更新第一条
	 * */
	@Test
	public void updateNestTest() {
		Query query = Query.query(Criteria.where("classId").is("1").and("Students.name").is("wwze05"));
		Update update = Update.update("Students.$.password", "456");
		
		//User user = new User("1","wwze05","wwze05","123");
		//update.pull("students", user);
		
		mongoTemplate.upsert(query, update, "fuzui");
	}
	
	/**
	 * 八、删除内嵌文档中的数据
	 * 只删除第一条
	 * 不能彻底删除,会把符合条件的数据修改为空;
	 * 如需彻底删除,需使用pull方法,pull方法中的实体对象数据应与被删除的完全一样。
	 * */
	@Test
	public void deleteNestTest() {
		Query query = Query.query(Criteria.where("classId").is("1").and("Students.name").is("wwze05"));
		Update update = new Update();
		update.unset("Students.$");
		mongoTemplate.upsert(query, update, "fuzui");
	}
	
	/**
	 * 九、删除
	 * remove方法
	 * */
	@Test
	public void deleteTest() {
		Query query = Query.query(Criteria.where("classId").is("1"));
		mongoTemplate.remove(query,"fuzui");
	}

	/**
	 * 十、查询全部
	 * */
	@Test
	public void queryAll(){
		List<User> userList = mongoTemplate.find(new Query(),User.class);
		System.out.println(mongoTemplate.find(new Query(),User.class));
	}
}

 

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
MongoTemplateSpring Data MongoDB提供的一个MongoDB操作模板,它封装了对MongoDB的常用操作方法。以下是MongoTemplate增删改查语法示例: 1. 插入文档(增加数据): 使用`insert()`方法插入单个文档: ```java mongoTemplate.insert(objectToInsert, collectionName); ``` 使用`insertAll()`方法插入多个文档: ```java mongoTemplate.insertAll(listOfObjectsToInsert); ``` 2. 查询文档(查询数据): 使用`find()`方法查询文档: ```java mongoTemplate.find(query, Object.class, collectionName); ``` 查询所有文档: ```java mongoTemplate.findAll(Object.class, collectionName); ``` 3. 更新文档(修改数据): 使用`updateFirst()`方法更新单个文档: ```java mongoTemplate.updateFirst(query, update, Object.class, collectionName); ``` 使用`updateMulti()`方法更新多个文档: ```java mongoTemplate.updateMulti(query, update, Object.class, collectionName); ``` 4. 删除文档(删除数据): 使用`remove()`方法删除单个文档: ```java mongoTemplate.remove(query, Object.class, collectionName); ``` 使用`removeMulti()`方法删除多个文档: ```java mongoTemplate.remove(query, Object.class, collectionName); ``` 其中,`mongoTemplate`是你创建的MongoTemplate对象,`query`是查询条件,`update`是更新操作的内容,`Object.class`表示要查询或更新的文档类型,`collectionName`是集合名称。你可以根据自己的需求使用不同的查询条件和更新操作来完成相应的操作。具体的语法和选项可以参考Spring Data MongoDB的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客时代

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值