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 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 userList = mongoTemplate.find(new Query(),User.class);
		System.out.println(mongoTemplate.find(new Query(),User.class));
	}
}

 

你可能感兴趣的:(mongodb,javaEE)