0


SpringBoot集成Mongodb

目录


1.什么是mongoDB?

  1. MongoDB是一种非关系型数据库,被广泛用于大型数据存储和分布式系统的构建。MongoDB支持的数据模型比传统的关系型数据库更加灵活,支持动态查询和索引,也支持json格式和bson格式的数据存储,这种格式可以支持读取和写入大量的数据。

2.Docker安装mongoDB

2.1拉取镜像

  1. docker pull mongo:4.4

2.2创建mongo数据持久化目录 (看自己爱好,放哪里都行)

  1. mkdir -p /docker_volume/mongodb/data

2.3启动容器

  1. docker run -itd --name mongo -v /docker_volume/mongodb/data:/data/db -p 27017:27017 mongo:4.4 --auth

2.4创建用户

1.使用以下命令进入容器的 MongoDB shell:

  1. docker exec -it mongo mongo admin

2.创建一个用户,mongo 默认没有用户

  1. db.createUser({
  2. user: 'root',
  3. pwd: 'xgd@123',
  4. roles: [
  5. { role: 'readWriteAnyDatabase', db: 'admin' },
  6. { role: 'dbAdminAnyDatabase', db: 'admin' }
  7. ]
  8. });

命令解释:

-d:表示在后台运行容器,并返回容器 ID。

-i:表示交互式运行容器,保留 STDIN 打开。

--name mongo-service:为容器指定一个名称,这里为 mongo-service。

--restart=always:表示在容器退出后自动重启容器。

-p 27017:27017:将容器的 27017 端口映射到宿主机的 27017 端口。

-v ~/data/mongodata:/data:将宿主机的 ~/data/mongodata 目录挂载到容器的 /data 目录下,用于持久化存储数据。

mongo:指定要运行的镜像名称,这里为官方的 MongoDB 镜像。

3.SpringBoot整合MongoDB步骤

1.导入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-mongodb</artifactId>
  4. </dependency>

2.配置

  1. spring:
  2. data:
  3. mongodb:
  4. host: 你的ip
  5. port: 27017
  6. username: root
  7. password: 123
  8. authenticationDatabase: admin
  9. database: test

3.操作MongoDB

第一种方式使用MongoTemplate‌工具类

添加实体类

  1. import lombok.Data;
  2. import org.springframework.data.mongodb.core.mapping.Document;
  3. import java.io.Serializable;
  4. import java.util.Date;
  5. /**
  6. * 映射表 test_demo
  7. */
  8. @Data
  9. @Document("test_demo")
  10. public class TestDemo implements Serializable {
  11. private static final long serialVersionUID = 1L;
  12. private String id;
  13. private String name;
  14. private Date birthDay;
  15. }

测试

  1. /**
  2. * MongoDB测试类
  3. * */
  4. @SpringBootTest(classes = MongoApplication.class)
  5. @RunWith(SpringRunner.class)
  6. public class MongoTest1 {
  7. @Autowired
  8. private MongoTemplate mongoTemplate;
  9. //保存
  10. @Test
  11. public void saveTest(){
  12. for (int i = 0; i < 10; i++) {
  13. TestDemo testDemo = new TestDemo();
  14. testDemo.setName("张三");
  15. testDemo.setBirthDay(new Date());
  16. mongoTemplate.save(testDemo);
  17. }
  18. TestDemo testDemo = new TestDemo();
  19. testDemo.setName("张三你吃饭了吗");
  20. testDemo.setBirthDay(new Date());
  21. mongoTemplate.save(testDemo);
  22. }
  23. //查询一个
  24. @Test
  25. public void saveFindOne(){
  26. TestDemo testDemo = mongoTemplate.findById("661743b77bee2f0a5739819d", TestDemo.class);
  27. System.out.println(testDemo);
  28. //TestDemo(id=661743b77bee2f0a5739819d, name=张三, birthDay=Thu Apr 11 09:58:15 CST 2024)
  29. }
  30. //条件查询
  31. @Test
  32. public void testQuery(){
  33. //查询字段name为张三的数据(多条件查询)
  34. Query query = Query.query(Criteria.where("name").is("张三"))
  35. .with(Sort.by(Sort.Direction.DESC,"birthDay"));
  36. // 执行查询 模糊查询 只查询5条数据
  37. Query query1 = Query.query(Criteria.where("name").regex(".*?\\" + "张三" + ".*"));
  38. query.limit(5);
  39. List<TestDemo> list = mongoTemplate.find(query, TestDemo.class);
  40. List<TestDemo> list1 = mongoTemplate.find(query1, TestDemo.class);
  41. System.out.println("list:"+list);
  42. System.out.println("list1:"+list1);
  43. }
  44. //测试删除
  45. @Test
  46. public void testDel(){
  47. mongoTemplate.remove(Query.query(Criteria.where("name").is("张三")),TestDemo.class);
  48. }
  49. }

第二种方式使用继承MongoRepository

添加实体类

  1. package com.xsp.spm.domain;
  2. import lombok.Data;
  3. import org.springframework.data.annotation.Id;
  4. import org.springframework.data.mongodb.core.index.Indexed;
  5. import org.springframework.data.mongodb.core.mapping.Document;
  6. /**
  7. * @Author:xsp
  8. * @Description:
  9. * @name:User
  10. * @Date:2024/9/14 17:24
  11. */
  12. @Data
  13. @Document(collection = "users")
  14. public class User {
  15. @Id
  16. private String id;
  17. @Indexed(unique = true)
  18. private String name;
  19. private Integer age;
  20. }

repository层

  1. package com.xsp.spm.repository;
  2. import com.xsp.spm.domain.User;
  3. import org.springframework.data.mongodb.repository.MongoRepository;
  4. import org.springframework.stereotype.Repository;
  5. /**
  6. * @Author:xsp
  7. * @Description:
  8. * @name:UserRepository
  9. * @Date:2024/9/14 17:25
  10. */
  11. @Repository
  12. public interface UserRepository extends MongoRepository<User, String> {
  13. }

controller层

  1. package com.xsp.spm.controller;
  2. import com.xsp.spm.domain.User;
  3. import com.xsp.spm.repository.UserRepository;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.data.mongodb.core.MongoTemplate;
  6. import org.springframework.web.bind.annotation.*;
  7. /**
  8. * @Author:xsp
  9. * @Description:
  10. * @name:UserController
  11. * @Date:2024/9/14 17:26
  12. */
  13. @RestController
  14. public class UserController {
  15. @Autowired
  16. private UserRepository userRepository;
  17. // 添加
  18. @PostMapping
  19. public User createUser(@RequestBody User user) {
  20. return userRepository.save(user);
  21. }
  22. // 详细
  23. @GetMapping("/{id}")
  24. public User getUser(@PathVariable String id) {
  25. return userRepository.findById(id).orElse(null);
  26. }
  27. // 删除
  28. @DeleteMapping("/{id}")
  29. public void deleteUser(@PathVariable String id) {
  30. userRepository.deleteById(id);
  31. }
  32. // 修改
  33. @PutMapping("/{id}")
  34. public User updateUser(@PathVariable String id, @RequestBody User user) {
  35. User userFromDb = userRepository.findById(id).orElse(null);
  36. if (userFromDb != null) {
  37. userFromDb.setName(user.getName());
  38. userFromDb.setAge(user.getAge());
  39. return userRepository.save(userFromDb);
  40. }
  41. return null;
  42. }
  43. // 列表
  44. @GetMapping
  45. public Iterable<User> getAllUsers() {
  46. return userRepository.findAll();
  47. }
  48. }

mongoDB 中MongoRepository和MongoTemplate的区别

MongoRepository‌:

  1. 特点‌:MongoRepositorySpring Data MongoDB的一部分,它提供了一种面向对象的方式来操作MongoDB。通过继承MongoRepository接口,可以很容易地实现CRUD操作和一些基本的查询操作。这种方式不需要编写原生的查询语句,使得操作更加简单和直观‌1

‌ 适用场景‌:当查询需求简单,可以通过方法名命名规则进行快速的CRUD操作时,使用MongoRepository是一个不错的选择。它适用于基本的CRUD操作和一些简单查询,但如果需要执行复杂的聚合或定制查询,可能不够灵活‌1。

MongoTemplate‌:

  1. 特点‌:MongoTemplateSpring Data MongoDB中更低级别的工具,它提供了更丰富的操作方法,包括条件查询、模糊查询、分页查询、数据修改和删除等。MongoTemplate允许更灵活的操作,包括原生的查询语句,提供了更大的灵活性来处理复杂的查询和数据操作‌2

‌ 适用场景‌:当需要执行复杂的查询或定制操作时,MongoTemplate可以弥补MongoRepository的不足。它适用于需要更多控制和灵活性的场景,如执行复杂的聚合查询或定制的数据处理任务‌

总结来说,MongoRepository适合简单的CRUD操作和一些基本的查询需求,而MongoTemplate则提供了更丰富的功能和更大的灵活性,适用于需要执行复杂查询或定制操作的场景。选择使用哪一个取决于具体的应用需求和技术栈‌

4.navicat连接mongoDB

b2536ffeae0e41f8a9fada52beb9190d.png

标签: spring boot 后端 java

本文转载自: https://blog.csdn.net/2301_81405087/article/details/143092659
版权归原作者 小疙瘩的编程之路 所有, 如有侵权,请联系我们删除。

“SpringBoot集成Mongodb”的评论:

还没有评论