相关推荐recommended
Springboot 集成 MongoDB
作者:mmseoamin日期:2024-02-03

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

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

    前言

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


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

    一、MongoDB是什么?

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

     

    二、使用步骤一

    1、引入库

    代码如下(示例):

    
        org.springframework.boot
        spring-boot-starter-data-mongodb
    
    

    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 {
     
    }
     
     

    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 userList = new ArrayList();
    		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 userList =userRepository.findAll();
    		for (User user : userList) {
    			System.out.println(user);
    		}
    		
    		//根据ID查询单个数据
    		Optional user = userRepository.findById("f777728d4779450e81c30fcf2c38dfe0");
    		
    		System.out.println(user.get());
    	}
    	
    	@Test
    	void findByCondition() {
    		System.out.println("根据条件配置来查询数据...");
    		
    		User user = new User();
    		user.setAge(32);
    		
    		Example example = Example.of(user);
    		
    		List 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 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 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 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 userList = new ArrayList();
    		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 t = (List) 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 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 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 = 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增加、查询、分页查询、删除数据等的操作,希望对伙伴们有一点点帮助。