Springboot 集成 MongoDB

在SpringBoot项目中集成MongoDB后的一些基本操作。


前言

本文介绍的内容是Springboot如何集成MongoDB,以及对MongoDB进行基本的增加、查询数据的操作。


提示:以下是本篇文章正文内容,下面案例可供参考

一、MongoDB是什么?

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前 NoSql 数据库中比较热门的一种。MongoDB 中的一条记录就是一个文档,与JSON类似。
 

二、使用步骤一

1、引入库

代码如下(示例):

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

2、配置Mongodb连接地址

代码如下(示例):

spring.data.mongodb.uri=mongodb://127.0.0.1:27017/admin 


3、创建实体类:

package com.hjxmongodb.mongdb.entity;
 
import org.springframework.data.mongodb.core.mapping.Document;
 
import lombok.Data;
 
/**
* 包名称:com.hjxmongodb.mongdb.entity
* @version 创作时间:2023年11月6日上午11:16:04
*
*/
@Document
@Data
public class User {
	
	private String id;
	
	private String name;
	
	private int age;
	
	private String gender;
	
	private String email;
	
	
 
}

4、创建自己的Repository接口类并实现 MongoRepository 接口

package com.hjxmongodb.mongdb.repository;
 
import org.springframework.data.mongodb.repository.MongoRepository;
 
import com.hjxmongodb.mongdb.entity.User;
 
/**
* 包名称:com.hjxmongodb.mongdb.repository
* @version 创作时间:2023年11月9日上午10:16:06
*
*/
 
public interface UserRepository extends MongoRepository<User, String> {
 
}
 
 

5、增加、查询数据

查询代码如下:

package com.hjxmongodb.mongdb;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Random;
import java.util.UUID;
 
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
 
import com.hjxmongodb.mongdb.entity.User;
import com.hjxmongodb.mongdb.repository.UserRepository;
 
/**
* 包名称:com.hjxmongodb.mongdb
* @version 创作时间:2023年11月9日上午10:58:19
*
*/
 
@SpringBootTest
public class MongoRepositoryTest {
 
 
	@Autowired
	private UserRepository userRepository;
 
 
	/**
	 * 批量增加数据
	 * 使用MongoRepository 批量插入数据
	 */
	@Test
	void createUsers() {
		
		Random random = new Random();
		Collection<User> userList = new ArrayList<User>();
		for (int i = 0; i < 100000; i++) {
			User user = new User();
			user.setId(UUID.randomUUID().toString().replace("-", ""));
			user.setAge(random.nextInt(22, 50));
			user.setGender(random.nextInt(0, 2)+"");
			user.setName("hjx" + random.nextInt(10000));
			user.setEmail("hjx"+random.nextInt(10000)+"wm@163.com");
			userList.add(user);
		}
 
		System.out.println("批量插入数据:" + userList.size());
		
		userList = userRepository.insert(userList);
		
		System.out.println("保存成功 : " + userList.size());
 
	}
	
	@Test
	void findUser() {
		System.out.println("使用MongoRepository 来查询数据...");
		
		//查询所有的数据
		List<User> userList =userRepository.findAll();
		for (User user : userList) {
			System.out.println(user);
		}
		
		//根据ID查询单个数据
		Optional<User> user = userRepository.findById("f777728d4779450e81c30fcf2c38dfe0");
		
		System.out.println(user.get());
	}
	
	@Test
	void findByCondition() {
		System.out.println("根据条件配置来查询数据...");
		
		User user = new User();
		user.setAge(32);
		
		Example<User> example = Example.of(user);
		
		List<User> tempUser =userRepository.findAll(example);
		
		System.out.println(tempUser.size());
		
	}
	
	@Test
	void findByConditions() {
		System.out.println("根据条件模糊查询数据...");
		ExampleMatcher exampleMatcher = ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING).withIgnoreCase(true);
		
		User userExample = new User();
		userExample.setName("99");
		userExample.setAge(32);
		userExample.setGender("1");
		
		Example example = Example.of(userExample,exampleMatcher);
		
		List<User> resultList =userRepository.findAll(example);
		
		System.out.println(resultList.size());
		
	}
	
	@Test
	void findByPages() {
		System.out.println("分页查询数据...");
		
		for (int i = 0; i < 10; i++) {
			Pageable pageable =PageRequest.of(i, 10);
			
			User userExample = new User();
			userExample.setAge(32);
			
			Example example = Example.of(userExample);
			
			Page<User> pages =userRepository.findAll(example, pageable);
			System.out.println(pages.getContent());
			System.out.println(pages.getContent().size());
			System.out.println(pages.getNumber());
			System.out.println(pages.getSize());
			System.out.println("------------------------");
		}
		
	}
 
 
 
}
 
 

三、方式二:使用MongoTemplate 来操作数据库

全部代码如下:

package com.hjxmongodb.mongdb;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import java.util.UUID;
 
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
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;
 
import com.hjxmongodb.mongdb.entity.User;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
 
/**
 * 包名称:com.hjxmongodb.mongdb
 * @version 创作时间:2023年11月9日上午10:09:09
 *
 */
 
@SpringBootTest
public class MongoTemplateTest {
 
	@Autowired
	private MongoTemplate mongoTemplate;
 
	static final String collectionName = "user";
 
	@Test
	void collectionExists() {
		System.out.println("创建集合,即数据库");
 
		// 判断是否已经存在该集合名称
		boolean collectionNameExists = mongoTemplate.collectionExists(collectionName);
		if (!collectionNameExists) {
			MongoCollection<org.bson.Document> document = mongoTemplate.createCollection(collectionName);
			System.out.println(document.toString());
		} else {
			System.out.println(collectionName + " is exists.");
		}
 
	}
 
	@Test
	void create() {
		System.out.println("批量增加数据...");
		Random random = new Random();
		Collection<User> userList = new ArrayList<User>();
		for (int i = 0; i < 100000; i++) {
			User user = new User();
			user.setId(UUID.randomUUID().toString().replace("-", ""));
			user.setAge(random.nextInt(22, 50));
			user.setGender(random.nextInt(0, 2) + "");
			user.setName("hjx" + random.nextInt(10000));
			user.setEmail("hjx" + random.nextInt(10000) + "wm@163.com");
			userList.add(user);
		}
 
		System.out.println("批量插入:" + userList.size() + "条数据。");
		List<User> t = (List<User>) mongoTemplate.insert(userList, collectionName);
		System.out.println("保存成功 : " + t.size());
 
	}
 
	@Test
	void findUser() {
		System.out.println("根据条件查找用户信息...");
		Query query = new Query();
		Criteria criteria = Criteria.where("age").gte(30); // 年龄等于30
		Criteria nameCriteria = Criteria.where("name").regex("99"); // 名称中包括99
 
		Criteria andCriteria = new Criteria();
		andCriteria.andOperator(criteria, nameCriteria);
 
		query.addCriteria(andCriteria);
 
		query.limit(400);
		List<User> userList = mongoTemplate.find(query, User.class, collectionName);
		System.out.println(userList.size());
		userList.forEach(item -> System.out.println(item));
 
	}
 
	@Test
	void findAll() {
		System.out.println("分页按条件查询数据....");
 
		Query query = new Query();
 
		Criteria criteria = Criteria.where("age").gte(30); // 年龄大于等于30
		Criteria nameCriteria = Criteria.where("name").regex("99"); // 名称中包含有99
 
		Criteria andCriteria = new Criteria();
		andCriteria.andOperator(criteria, nameCriteria);
 
		query.addCriteria(andCriteria);
 
		for (int i = 0; i < 10; i++) {
			
			Pageable pageable = PageRequest.of(i, 10);//每页查询10条数据
			query.with(pageable);
 
			List<User> pages = mongoTemplate.find(query, User.class, collectionName);
 
			System.out.println(pages.size());
			System.out.println(pages);
			System.out.println("------------------------");
		}
 
	}
	
	@Test
	void findallUser() {
		System.out.println("查询所有数据,循环输出....");
		
		List<User> user = mongoTemplate.findAll(User.class, collectionName);
 
		// 第一种循环打印数据的方式:
		user.forEach(item -> System.out.println(item));
 
		// 第二种循环打印数据的方式:
		user.forEach(System.out::println);
	}
	
 
	@Test
	void update() {
		System.out.println("更新用户信息...");
		Criteria updateCriteria = Criteria.where("age").is(22);
 
		Update updateItem = new Update();
		updateItem.set("age", 32);
 
		UpdateResult result = mongoTemplate.updateMulti(new Query(updateCriteria), updateItem, User.class,
				collectionName);
 
		System.out.println(result.toString());
 
	}
 
	@Test
	void delete() {
		System.out.println("删除用户信息...");
		Criteria updateCriteria = Criteria.where("age").is(35);
 
		DeleteResult result = mongoTemplate.remove(new Query(updateCriteria), User.class, collectionName);
 
		System.out.println(result);
	}
 
//	@Test
	void deleteAll() {
		System.out.println("删除所有用户信息...");
 
		//方式1:删除所有数据
//		DeleteResult result = mongoTemplate.remove(new Query(), collectionName);
//		System.out.println(result);
 
		//方式2:删除所有数据,删除集合就可以了。
		mongoTemplate.dropCollection(collectionName);
 
 
 
	}
 
}


总结

以上就是在SpringBoot项目中集成MongoDB后的一些基本操作。本文简单介绍了MongoDB增加、查询、分页查询、删除数据等的操作,希望对伙伴们有一点点帮助。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值