• SpringBoot整合MongoDB


    1、集成简介

    spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。

    2、搭建开发环境

    2.1 初始化工程

    使用 Spring Initializr 快速初始化一个 Spring Boot 工程

    Group:com.atguigu

    Artifact:mongodb

    2.2 引入依赖

    修改pom.xml:

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-data-mongodb</artifactId>
    5. </dependency>
    6. <dependency>
    7. <groupId>org.springframework.boot</groupId>
    8. <artifactId>spring-boot-starter-web</artifactId>
    9. </dependency>
    10. <dependency>
    11. <groupId>org.projectlombok</groupId>
    12. <artifactId>lombok</artifactId>
    13. </dependency>
    14. <dependency>
    15. <groupId>joda-time</groupId>
    16. <artifactId>joda-time</artifactId>
    17. <version>2.10.1</version>
    18. </dependency>
    19. <dependency>
    20. <groupId>org.springframework.boot</groupId>
    21. <artifactId>spring-boot-starter-test</artifactId>
    22. <scope>test</scope>
    23. <exclusions>
    24. <exclusion>
    25. <groupId>org.junit.vintage</groupId>
    26. <artifactId>junit-vintage-engine</artifactId>
    27. </exclusion>
    28. </exclusions>
    29. </dependency>
    30. </dependencies>

    2.3 添加配置

    在application.properties文件添加配置:

    spring.data.mongodb.uri=mongodb://47.93.118.241:27017/test

    3、基于MongoTemplate 开发CRUD

    3.1 添加实体

    添加com.atguigu.mongodb.entity.User类:

    1. @Data
    2. @Accessors(chain = true)
    3. @Document("User")
    4. public class User {
    5. @Id
    6. private String id;
    7. private String name;
    8. private Integer age;
    9. private String email;
    10. private String createDate;
    11. }

    3.2 实现

    常用方法

    mongoTemplate.findAll(User.class): 查询User文档的全部数据

    mongoTemplate.findById(, User.class): 查询User文档id为id的数据

    mongoTemplate.find(query, User.class);: 根据query内的查询条件查询

    mongoTemplate.upsert(query, update, User.class): 修改

    mongoTemplate.remove(query, User.class): 删除

    mongoTemplate.insert(User): 新增

    Query对象

    1、创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)

    2、 精准条件:criteria.and(“key”).is(“条件”)

    模糊条件:criteria.and(“key”).regex(“条件”)

    3、封装条件:query.addCriteria(criteria)

    4、大于(创建新的criteria):Criteria gt = Criteria.where(“key”).gt(“条件”)

    小于(创建新的criteria):Criteria lt = Criteria.where(“key”).lt(“条件”)

    5、Query.addCriteria(new Criteria().andOperator(gt,lt));

    6、一个query中只能有一个andOperator()。其参数也可以是Criteria数组。

    7、排序 :query.with(new Sort(Sort.Direction.ASC, "age"). and(new Sort(Sort.Direction.DESC, "date")))

    3.3 添加测试类

    在/test/java下面添加测试类:

    1. @SpringBootTest
    2. class DemomogoApplicationTests {
    3. @Autowired
    4. private MongoTemplate mongoTemplate;
    5. //添加
    6. @Test
    7. public void createUser() {
    8. User user = new User();
    9. user.setAge(20);
    10. user.setName("test");
    11. user.setEmail("4932200@qq.com");
    12. User user1 = mongoTemplate.insert(user);
    13. System.out.println(user1);
    14. }
    15. //查询所有
    16. @Test
    17. public void findUser() {
    18. List<User> userList = mongoTemplate.findAll(User.class);
    19. System.out.println(userList);
    20. }
    21. //根据id查询
    22. @Test
    23. public void getById() {
    24. User user =
    25. mongoTemplate.findById("5ffbfa2ac290f356edf9b5aa", User.class);
    26. System.out.println(user);
    27. }
    28. //条件查询
    29. @Test
    30. public void findUserList() {
    31. Query query = new Query(Criteria
    32. .where("name").is("test")
    33. .and("age").is(20));
    34. List<User> userList = mongoTemplate.find(query, User.class);
    35. System.out.println(userList);
    36. }
    37. //模糊查询
    38. @Test
    39. public void findUsersLikeName() {
    40. String name = "est";
    41. String regex = String.format("%s%s%s", "^.*", name, ".*$");
    42. Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    43. Query query = new Query(Criteria.where("name").regex(pattern));
    44. List<User> userList = mongoTemplate.find(query, User.class);
    45. System.out.println(userList);
    46. }
    47. //分页查询
    48. @Test
    49. public void findUsersPage() {
    50. String name = "est";
    51. int pageNo = 1;
    52. int pageSize = 10;
    53. Query query = new Query();
    54. String regex = String.format("%s%s%s", "^.*", name, ".*$");
    55. Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    56. query.addCriteria(Criteria.where("name").regex(pattern));
    57. int totalCount = (int) mongoTemplate.count(query, User.class);
    58. List<User> userList = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);
    59. Map<String, Object> pageMap = new HashMap<>();
    60. pageMap.put("list", userList);
    61. pageMap.put("totalCount",totalCount);
    62. System.out.println(pageMap);
    63. }
    64. //修改
    65. @Test
    66. public void updateUser() {
    67. User user = mongoTemplate.findById("5ffbfa2ac290f356edf9b5aa", User.class);
    68. user.setName("test_1");
    69. user.setAge(25);
    70. user.setEmail("493220990@qq.com");
    71. Query query = new Query(Criteria.where("_id").is(user.getId()));
    72. Update update = new Update();
    73. update.set("name", user.getName());
    74. update.set("age", user.getAge());
    75. update.set("email", user.getEmail());
    76. UpdateResult result = mongoTemplate.upsert(query, update, User.class);
    77. long count = result.getModifiedCount();
    78. System.out.println(count);
    79. }
    80. //删除操作
    81. @Test
    82. public void delete() {
    83. Query query =
    84. new Query(Criteria.where("_id").is("5ffbfa2ac290f356edf9b5aa"));
    85. DeleteResult result = mongoTemplate.remove(query, User.class);
    86. long count = result.getDeletedCount();
    87. System.out.println(count);
    88. }
    89. }

    4、基于MongoRepository开发CRUD

    4.1 实现

    Spring Data提供了对mongodb数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范就可以了

    SpringData 方法定义规范:

    1、不是随便声明的,而需要符合一定的规范

    2、 查询方法以find | read | get开头

    3、 涉及条件查询时,条件的属性用条件关键字连接

    4、 要注意的是:条件属性首字母需要大写

    5、 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性,若需要使用级联属性,则属性之间使用_强制进行连接

    4.2 添加Repository类

    添加com.atguigu.mongodb.repository.UserRepository类:

    1. package com.atguigu.mongodb.repository;
    2. import com.atguigu.mongodb.entity.User;
    3. import org.springframework.data.mongodb.repository.MongoRepository;
    4. import org.springframework.stereotype.Repository;
    5. import java.util.List;
    6. @Repository
    7. public interface UserRepository extends MongoRepository {
    8. }

    4.3 添加测试类

    在/test/java下面添加测试类:

    1. @SpringBootTest
    2. class DemomogoApplicationTests1 {
    3. @Autowired
    4. private UserRepository userRepository;
    5. //添加
    6. @Test
    7. public void createUser() {
    8. User user = new User();
    9. user.setAge(20);
    10. user.setName("张三");
    11. user.setEmail("3332200@qq.com");
    12. User user1 = userRepository.save(user);
    13. }
    14. //查询所有
    15. @Test
    16. public void findUser() {
    17. List<User> userList = userRepository.findAll();
    18. System.out.println(userList);
    19. }
    20. //id查询
    21. @Test
    22. public void getById() {
    23. User user = userRepository.findById("5ffbfe8197f24a07007bd6ce").get();
    24. System.out.println(user);
    25. }
    26. //条件查询
    27. @Test
    28. public void findUserList() {
    29. User user = new User();
    30. user.setName("张三");
    31. user.setAge(20);
    32. Example<User> userExample = Example.of(user);
    33. List<User> userList = userRepository.findAll(userExample);
    34. System.out.println(userList);
    35. }
    36. //模糊查询
    37. @Test
    38. public void findUsersLikeName() {
    39. //创建匹配器,即如何使用查询条件
    40. ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
    41. .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
    42. .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
    43. User user = new User();
    44. user.setName("三");
    45. Example<User> userExample = Example.of(user, matcher);
    46. List<User> userList = userRepository.findAll(userExample);
    47. System.out.println(userList);
    48. }
    49. //分页查询
    50. @Test
    51. public void findUsersPage() {
    52. Sort sort = Sort.by(Sort.Direction.DESC, "age");
    53. //0为第一页
    54. Pageable pageable = PageRequest.of(0, 10, sort);
    55. //创建匹配器,即如何使用查询条件
    56. ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
    57. .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
    58. .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
    59. User user = new User();
    60. user.setName("三");
    61. Example<User> userExample = Example.of(user, matcher);
    62. //创建实例
    63. Example<User> example = Example.of(user, matcher);
    64. Page<User> pages = userRepository.findAll(example, pageable);
    65. System.out.println(pages);
    66. }
    67. //修改
    68. @Test
    69. public void updateUser() {
    70. User user = userRepository.findById("5ffbfe8197f24a07007bd6ce").get();
    71. user.setName("张三_1");
    72. user.setAge(25);
    73. user.setEmail("883220990@qq.com");
    74. User save = userRepository.save(user);
    75. System.out.println(save);
    76. }
    77. //删除
    78. @Test
    79. public void delete() {
    80. userRepository.deleteById("5ffbfe8197f24a07007bd6ce");
    81. }
    82. }

  • 相关阅读:
    Python图像处理:局部直方图均衡化和自动色彩均衡化
    向Visual Studio Code导入ST项目
    学会安装Redis数据库到服务器或计算机(Windows版)
    前端程序员辞掉朝九晚五工作成为独立开发者一年开发出6款软件的故事
    数据库创建表,查询表,对表进行增删改查,以及分组使用进行查询,还有排序
    民安智库(第三方满意度调研公司)医院满意度调查:用数据说话,让服务更贴心
    1.1.1 算法的概念(第 1 课时)
    Ubuntu 20.04 上安装和配置 neo4j
    [随手记]selector是如何生效的
    深度学习输入数据的归一化
  • 原文地址:https://blog.csdn.net/weixin_55076626/article/details/127813494