MongoDB学习---SpringBoot整合MongoDB

该博客介绍了使用SpringBoot操作MongoDB数据库的方法。首先创建SpringBoot项目并导入依赖,接着进行application.yml配置,然后对MongoDB数据库进行操作,包含测试及创建三个需实现序列化的实体类,最后给出了源码的GitHub传送门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 创建SpringBoot项目导入依赖

 <dependencies>
        <!--mongo整合springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

  
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

二. application.yml配置

spring:
  data:
    mongodb:
      uri: mongodb://192.168.153.124:27017/ems

三. 操作MongoDB数据库

TestMain01 测试

package com.xizi.springboot_mongodb.mogoClient;


@SpringBootTest(classes = SpringbootMongodbApplication.class)
@RunWith(SpringRunner.class)
public class TestMain01 {
	
	@Autowired
	private MongoTemplate temp;
	
	// 根据主键id查询
	@Test
	public void test08(){
		Person person = temp.findById("1111111111",Person.class);
		List<Order> orders = person.getOrders();
		for (Order order : orders) {
			System.out.println(order);
		}
	}
	// 测试有级联关系的两个对象
	@Test
	public void test06(){
		Person p = new Person("1111111111","haha",23,1111);
		List<Order> list =new ArrayList<Order>();
		for(int i = 0 ; i < 3; i++){
			ObjectId objectId  = new ObjectId(new Date());
			Order o = new Order(objectId, 111111+"_"+i, new Date());
			temp.save(o);
			list.add(o);
		}
		p.setOrders(list);
		temp.save(p);
	}
	// 删除数据
	@Test
	public void test05(){
		Person s = new Person();
		s.setId(1+"");
		temp.remove(s);
	}
	// 查询person表中的所有数据
	@Test
	public void test03(){
		List<Person> list = temp.findAll(Person.class);
		for (Person s : list) {
			System.out.println(s);
		}
	}
	// 添加数据
	@Test
	public void test02() {
		/*for(int i = 0 ;  i< 5;i++){
			Student s = new Student(10+i+"", "zhangsan"+i, 12*i, 2000+i);
			temp.save(s);
		}*/
		// 主键如果存在,进行更新
		/*Student s = new Student("2", "zhangsasssssn", 111, 2000);
		temp.save(s);*/
		/**
		 * insert方法:如果key存在,报错
		 */
		Person s = new Person("2", "戏子", 111, 2000);
		temp.insert(s);
	}

}

TestMain02 测试

package com.xizi.springboot_mongodb.mogoClient;

public class TestMain02 {
	
	@Autowired
	private MongoTemplate temp;
	
	
	@Test
	public void testAddBatch(){
		for(int i = 0 ; i<10;i++){
			String id = UUID.randomUUID().toString().replace("-", "");
			Person p = new Person(id, "zhangsan"+i, 10+i*2, 10000+i*2);
			temp.save(p);
		}
	}

	@Test  //   排序
	public void testOrder(){
		Query query = new 	Query();
		query.addCriteria(new Criteria().where("age").gt(10));
		query.limit(10);
		query.skip(2);
		// 按照salary的升序排列
//		query.with(new Sort(Direction.ASC,"salary"));
		// 按照salary的降序排列
//		query.with(new Sort(Direction.DESC, "salary"));
		List<Person> list = temp.find(query, Person.class);
		
		bianli(list);
	}
	@Test  
	public void testLimitSkip(){
		Query query = new 	Query();
		query.addCriteria(new Criteria().where("age").gt(10));
		query.limit(10);
		query.skip(2);
		List<Person> list = temp.find(query, Person.class);
		bianli(list);
	}
	@Test  // 查询与数组相关的信息
	public void testQuery03(){
		Query query = new 	Query();
		Pattern pattern = Pattern.compile("^.*1.*$", Pattern.CASE_INSENSITIVE);

		query.addCriteria(Criteria.where("name").regex(pattern));
		List<Person> list = temp.find(query, Person.class);
		bianli(list);
	}
	@Test  // 查询与数组相关的信息
	public void testQuery02(){
		Query query = new 	Query();
		// 查询  age数组长度为4的数据
//		query.addCriteria(Criteria.where("age").size(4));
		// 查询 age数组第三位 为 "aa"的记录
//		query.addCriteria(Criteria.where("age.2").is("aa"));
		List<Person> list = temp.find(query, Person.class);
		bianli(list);
	}
	@Test
	public void testQuery01(){
		Query query = new 	Query();
		// 查询  age =18
		//query.addCriteria(new Criteria().where("age").is(18));
		//查询 age > 12 并且  age< 20
		//query.addCriteria(new Criteria().andOperator(new Criteria("age").gt(12),new Criteria("age").lt(20)));
		//查询  age =1  或者 age = 100
//		query.addCriteria(new Criteria().orOperator(new Criteria("age").is(1),new Criteria("age").is(1000)));
		// 查询  age  in  (1,2)
//		query.addCriteria(new Criteria().where("age").in(1,2));
		
		// 查询  age值  除以5  余数为2的数据
		query.addCriteria(new Criteria("age").mod(5,2));
		List<Person> list = temp.find(query, Person.class);
		bianli(list);
	}
	public void bianli(List<Person> list){
		for (Object o : list) {
			System.out.println(o);
		}
	}
	@Test
	public void testUpdate04(){
		Query query = new 	Query();
		query.addCriteria(new Criteria().where("key1").is("hello 1"));
		Update update = new Update();
		update.set("key1", "value1");
		update.pushAll("age",new Object[]{12,"aa",13});
		temp.updateFirst(query,update, Person.class);
	}
	@Test
	public void testUpdate03(){
		Query query = new 	Query();
		query.addCriteria(new Criteria("age").gt(26).lt(30));
		// 用新元素替换旧元素
		DBObject obj = new BasicDBObject("key1", "value1");
		Update update = new BasicUpdate((Document) obj);
		temp.updateFirst(query,update, Person.class);
	}
	@Test
	public void testUpdate02(){
		Query query = new 	Query();
		query.addCriteria(new Criteria("age").gt(26).lt(30));
		// 用新元素替换旧元素
		DBObject obj = new BasicDBObject("key1", "value1");
		Update update = new BasicUpdate((Document) obj);
		temp.updateFirst(query,update, Person.class);
	}
	@Test
	public void testUpdate01(){
		Query query = new 	Query();
		query.addCriteria(new Criteria("age").gt(26).lt(30));
		// 在原始旧数据的基础上进行修改
		Update update = new Update();
		update.set("name","helloe zhangsan"); //根据key,对对应的值进行更新
		update.inc("salary", 3);  // 将该key对于的值进行递增
		update.pull("optKey",new String[]{"optionValue1","optionValue2"});//只对数组有效。 将新数据压入到key对应的数组中
		update.pop("optKey", Position.FIRST); // 只能对数组有用。将数组特定位置的元素移除
		
		temp.updateFirst(query,update, Person.class);
	}
	
}

还有三个实体类,差点忘了,一定要实现序列化

User

package com.xizi.springboot_mongodb.pojo;

@AllArgsConstructor
@Data
@NoArgsConstructor
@Accessors(chain = true)
@Document(collation = "t_user1")
public class User implements Serializable {

    @Id
    private String id;
    private String name;
    private Integer age;

    @Transient  //对象序列化时 当前这个属性不参加对象列化
    private Date bir;
}

Order

package com.xizi.springboot_mongodb.pojo;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Document(collection="t_order")
public class Order {
	@Id
	@Indexed  //创建索引
	private ObjectId id;
	@Field("order_num")
	private String orderNum;
	private Date createDate;
	// 映射忽略的字段,该字段不会保存到mongodb。
	@Transient
	private String cc;

	public Order(ObjectId id, String orderNum, Date createDate) {
		this.id = id;
		this.orderNum = orderNum;
		this.createDate = createDate;
	}
}

Person

package com.xizi.springboot_mongodb.pojo;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection="t_person")
public class Person {
	@Id // 主键类型只能为:String,ObjectId,BigInteger
	private String id;
	private String name;
	private int age;
	private double salary;
	@DBRef
	private List<Order> orders = null;


	public Person(String id, String name, int age, double salary) {

		this.id = id;
		this.name = name;
		this.age = age;
		this.salary = salary;
	}
}

四. 测试

这里测试两三个,其他自己慢慢捣鼓
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五. 源码GitHub传送门

GitHub传送门下载

https://github.com/Y960303802/Mongodb_Study

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值