• Springboot 集成 MongoDB


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


    前言

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


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

    一、MongoDB是什么?

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

    二、使用步骤一

    1、引入库

    代码如下(示例):

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

    2、配置Mongodb连接地址

    代码如下(示例):

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


    3、创建实体类:

    1. package com.hjxmongodb.mongdb.entity;
    2. import org.springframework.data.mongodb.core.mapping.Document;
    3. import lombok.Data;
    4. /**
    5. * 包名称:com.hjxmongodb.mongdb.entity
    6. * @version 创作时间:2023116日上午11:16:04
    7. *
    8. */
    9. @Document
    10. @Data
    11. public class User {
    12. private String id;
    13. private String name;
    14. private int age;
    15. private String gender;
    16. private String email;
    17. }

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

    1. package com.hjxmongodb.mongdb.repository;
    2. import org.springframework.data.mongodb.repository.MongoRepository;
    3. import com.hjxmongodb.mongdb.entity.User;
    4. /**
    5. * 包名称:com.hjxmongodb.mongdb.repository
    6. * @version 创作时间:2023年11月9日上午10:16:06
    7. *
    8. */
    9. public interface UserRepository extends MongoRepository {
    10. }

    5、增加、查询数据

    查询代码如下:

    1. package com.hjxmongodb.mongdb;
    2. import java.util.ArrayList;
    3. import java.util.Collection;
    4. import java.util.List;
    5. import java.util.Optional;
    6. import java.util.Random;
    7. import java.util.UUID;
    8. import org.junit.jupiter.api.Test;
    9. import org.springframework.beans.factory.annotation.Autowired;
    10. import org.springframework.boot.test.context.SpringBootTest;
    11. import org.springframework.data.domain.Example;
    12. import org.springframework.data.domain.ExampleMatcher;
    13. import org.springframework.data.domain.Page;
    14. import org.springframework.data.domain.PageRequest;
    15. import org.springframework.data.domain.Pageable;
    16. import com.hjxmongodb.mongdb.entity.User;
    17. import com.hjxmongodb.mongdb.repository.UserRepository;
    18. /**
    19. * 包名称:com.hjxmongodb.mongdb
    20. * @version 创作时间:2023年11月9日上午10:58:19
    21. *
    22. */
    23. @SpringBootTest
    24. public class MongoRepositoryTest {
    25. @Autowired
    26. private UserRepository userRepository;
    27. /**
    28. * 批量增加数据
    29. * 使用MongoRepository 批量插入数据
    30. */
    31. @Test
    32. void createUsers() {
    33. Random random = new Random();
    34. Collection userList = new ArrayList();
    35. for (int i = 0; i < 100000; i++) {
    36. User user = new User();
    37. user.setId(UUID.randomUUID().toString().replace("-", ""));
    38. user.setAge(random.nextInt(22, 50));
    39. user.setGender(random.nextInt(0, 2)+"");
    40. user.setName("hjx" + random.nextInt(10000));
    41. user.setEmail("hjx"+random.nextInt(10000)+"wm@163.com");
    42. userList.add(user);
    43. }
    44. System.out.println("批量插入数据:" + userList.size());
    45. userList = userRepository.insert(userList);
    46. System.out.println("保存成功 : " + userList.size());
    47. }
    48. @Test
    49. void findUser() {
    50. System.out.println("使用MongoRepository 来查询数据...");
    51. //查询所有的数据
    52. List userList =userRepository.findAll();
    53. for (User user : userList) {
    54. System.out.println(user);
    55. }
    56. //根据ID查询单个数据
    57. Optional user = userRepository.findById("f777728d4779450e81c30fcf2c38dfe0");
    58. System.out.println(user.get());
    59. }
    60. @Test
    61. void findByCondition() {
    62. System.out.println("根据条件配置来查询数据...");
    63. User user = new User();
    64. user.setAge(32);
    65. Example example = Example.of(user);
    66. List tempUser =userRepository.findAll(example);
    67. System.out.println(tempUser.size());
    68. }
    69. @Test
    70. void findByConditions() {
    71. System.out.println("根据条件模糊查询数据...");
    72. ExampleMatcher exampleMatcher = ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING).withIgnoreCase(true);
    73. User userExample = new User();
    74. userExample.setName("99");
    75. userExample.setAge(32);
    76. userExample.setGender("1");
    77. Example example = Example.of(userExample,exampleMatcher);
    78. List resultList =userRepository.findAll(example);
    79. System.out.println(resultList.size());
    80. }
    81. @Test
    82. void findByPages() {
    83. System.out.println("分页查询数据...");
    84. for (int i = 0; i < 10; i++) {
    85. Pageable pageable =PageRequest.of(i, 10);
    86. User userExample = new User();
    87. userExample.setAge(32);
    88. Example example = Example.of(userExample);
    89. Page pages =userRepository.findAll(example, pageable);
    90. System.out.println(pages.getContent());
    91. System.out.println(pages.getContent().size());
    92. System.out.println(pages.getNumber());
    93. System.out.println(pages.getSize());
    94. System.out.println("------------------------");
    95. }
    96. }
    97. }

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

    全部代码如下:

    1. package com.hjxmongodb.mongdb;
    2. import java.util.ArrayList;
    3. import java.util.Collection;
    4. import java.util.List;
    5. import java.util.Random;
    6. import java.util.UUID;
    7. import org.junit.jupiter.api.Test;
    8. import org.springframework.beans.factory.annotation.Autowired;
    9. import org.springframework.boot.test.context.SpringBootTest;
    10. import org.springframework.data.domain.PageRequest;
    11. import org.springframework.data.domain.Pageable;
    12. import org.springframework.data.mongodb.core.MongoTemplate;
    13. import org.springframework.data.mongodb.core.query.Criteria;
    14. import org.springframework.data.mongodb.core.query.Query;
    15. import org.springframework.data.mongodb.core.query.Update;
    16. import com.hjxmongodb.mongdb.entity.User;
    17. import com.mongodb.client.MongoCollection;
    18. import com.mongodb.client.result.DeleteResult;
    19. import com.mongodb.client.result.UpdateResult;
    20. /**
    21. * 包名称:com.hjxmongodb.mongdb
    22. * @version 创作时间:2023年11月9日上午10:09:09
    23. *
    24. */
    25. @SpringBootTest
    26. public class MongoTemplateTest {
    27. @Autowired
    28. private MongoTemplate mongoTemplate;
    29. static final String collectionName = "user";
    30. @Test
    31. void collectionExists() {
    32. System.out.println("创建集合,即数据库");
    33. // 判断是否已经存在该集合名称
    34. boolean collectionNameExists = mongoTemplate.collectionExists(collectionName);
    35. if (!collectionNameExists) {
    36. MongoCollection document = mongoTemplate.createCollection(collectionName);
    37. System.out.println(document.toString());
    38. } else {
    39. System.out.println(collectionName + " is exists.");
    40. }
    41. }
    42. @Test
    43. void create() {
    44. System.out.println("批量增加数据...");
    45. Random random = new Random();
    46. Collection userList = new ArrayList();
    47. for (int i = 0; i < 100000; i++) {
    48. User user = new User();
    49. user.setId(UUID.randomUUID().toString().replace("-", ""));
    50. user.setAge(random.nextInt(22, 50));
    51. user.setGender(random.nextInt(0, 2) + "");
    52. user.setName("hjx" + random.nextInt(10000));
    53. user.setEmail("hjx" + random.nextInt(10000) + "wm@163.com");
    54. userList.add(user);
    55. }
    56. System.out.println("批量插入:" + userList.size() + "条数据。");
    57. List t = (List) mongoTemplate.insert(userList, collectionName);
    58. System.out.println("保存成功 : " + t.size());
    59. }
    60. @Test
    61. void findUser() {
    62. System.out.println("根据条件查找用户信息...");
    63. Query query = new Query();
    64. Criteria criteria = Criteria.where("age").gte(30); // 年龄等于30
    65. Criteria nameCriteria = Criteria.where("name").regex("99"); // 名称中包括99
    66. Criteria andCriteria = new Criteria();
    67. andCriteria.andOperator(criteria, nameCriteria);
    68. query.addCriteria(andCriteria);
    69. query.limit(400);
    70. List userList = mongoTemplate.find(query, User.class, collectionName);
    71. System.out.println(userList.size());
    72. userList.forEach(item -> System.out.println(item));
    73. }
    74. @Test
    75. void findAll() {
    76. System.out.println("分页按条件查询数据....");
    77. Query query = new Query();
    78. Criteria criteria = Criteria.where("age").gte(30); // 年龄大于等于30
    79. Criteria nameCriteria = Criteria.where("name").regex("99"); // 名称中包含有99
    80. Criteria andCriteria = new Criteria();
    81. andCriteria.andOperator(criteria, nameCriteria);
    82. query.addCriteria(andCriteria);
    83. for (int i = 0; i < 10; i++) {
    84. Pageable pageable = PageRequest.of(i, 10);//每页查询10条数据
    85. query.with(pageable);
    86. List pages = mongoTemplate.find(query, User.class, collectionName);
    87. System.out.println(pages.size());
    88. System.out.println(pages);
    89. System.out.println("------------------------");
    90. }
    91. }
    92. @Test
    93. void findallUser() {
    94. System.out.println("查询所有数据,循环输出....");
    95. List user = mongoTemplate.findAll(User.class, collectionName);
    96. // 第一种循环打印数据的方式:
    97. user.forEach(item -> System.out.println(item));
    98. // 第二种循环打印数据的方式:
    99. user.forEach(System.out::println);
    100. }
    101. @Test
    102. void update() {
    103. System.out.println("更新用户信息...");
    104. Criteria updateCriteria = Criteria.where("age").is(22);
    105. Update updateItem = new Update();
    106. updateItem.set("age", 32);
    107. UpdateResult result = mongoTemplate.updateMulti(new Query(updateCriteria), updateItem, User.class,
    108. collectionName);
    109. System.out.println(result.toString());
    110. }
    111. @Test
    112. void delete() {
    113. System.out.println("删除用户信息...");
    114. Criteria updateCriteria = Criteria.where("age").is(35);
    115. DeleteResult result = mongoTemplate.remove(new Query(updateCriteria), User.class, collectionName);
    116. System.out.println(result);
    117. }
    118. // @Test
    119. void deleteAll() {
    120. System.out.println("删除所有用户信息...");
    121. //方式1:删除所有数据
    122. // DeleteResult result = mongoTemplate.remove(new Query(), collectionName);
    123. // System.out.println(result);
    124. //方式2:删除所有数据,删除集合就可以了。
    125. mongoTemplate.dropCollection(collectionName);
    126. }
    127. }


    总结

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

  • 相关阅读:
    1024程序节特辑:一文读懂小程序支付流程
    数字时代,医疗健康企业如何通过数字营销创造用户价值
    编程架构演化史:远古时代,从打孔卡(Punched Card)开始
    LQ0250 n进制小数【程序填空】
    相机专业模型详解,各个参数作用,专业模式英文全称和缩写
    关于城市旅游的HTML网页设计——中国旅游HTML+CSS+JavaScript 出游旅游主题度假酒店 计划出行网站设计
    Spring 如何使用注解装配Bean呢?
    《MongoDB》Mongo Shell中基本操作-ObjectId和文档创建详解
    BIM知识 | BIM管线综合原则
    pytorch 32 onnx模型每次输出的结果都会变的解决方案
  • 原文地址:https://blog.csdn.net/hjx_code/article/details/134369679