MongoDB

关注公众号 jb51net

关闭
首页 > 数据库 > MongoDB > SpringBoot集成Mongodb

SpringBoot集成Mongodb的操作方法

作者:小疙瘩的编程之路

本文介绍了MongoDB的基本概念、Docker安装步骤、SpringBoot整合MongoDB的方法,以及MongoRepository和MongoTemplate的区别,感兴趣的朋友一起看看吧

1.什么是mongoDB?

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

2.Docker安装mongoDB

2.1拉取镜像

docker pull mongo:4.4

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

mkdir -p /docker_volume/mongodb/data

2.3启动容器

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

2.4创建用户  

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

docker exec -it mongo mongo admin

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

    
db.createUser({
  user: 'root',
  pwd: 'xgd@123',
  roles: [
    { role: 'readWriteAnyDatabase', db: 'admin' },
    { role: 'dbAdminAnyDatabase', db: 'admin' }
  ]
});

命令解释:

-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.导入依赖

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

2.配置

spring:
  data:
    mongodb:
      host: 你的ip
      port: 27017
      username: root
      password: 123
      authenticationDatabase: admin
      database: test

3.操作MongoDB     第一种方式使用MongoTemplate‌工具类   添加实体类

import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.util.Date;
/**
 * 映射表 test_demo
 */
@Data
@Document("test_demo")
public class TestDemo implements Serializable {
    private static final long serialVersionUID = 1L;
    private String id;
    private String name;
    private Date birthDay;
}

  测试

/**
 * MongoDB测试类
 * */
@SpringBootTest(classes = MongoApplication.class)
@RunWith(SpringRunner.class)
public class MongoTest1 {
    @Autowired
    private MongoTemplate mongoTemplate;
    //保存
    @Test
    public void saveTest(){
        for (int i = 0; i < 10; i++) {
            TestDemo testDemo = new TestDemo();
            testDemo.setName("张三");
            testDemo.setBirthDay(new Date());
             mongoTemplate.save(testDemo);
        }
        TestDemo testDemo = new TestDemo();
        testDemo.setName("张三你吃饭了吗");
        testDemo.setBirthDay(new Date());
        mongoTemplate.save(testDemo);
    }
    //查询一个
    @Test
    public void saveFindOne(){
        TestDemo testDemo = mongoTemplate.findById("661743b77bee2f0a5739819d", TestDemo.class);
        System.out.println(testDemo);
        //TestDemo(id=661743b77bee2f0a5739819d, name=张三, birthDay=Thu Apr 11 09:58:15 CST 2024)
    }
    //条件查询
    @Test
    public void testQuery(){
        //查询字段name为张三的数据(多条件查询)
        Query query = Query.query(Criteria.where("name").is("张三"))
                .with(Sort.by(Sort.Direction.DESC,"birthDay"));
        // 执行查询 模糊查询 只查询5条数据
        Query query1 = Query.query(Criteria.where("name").regex(".*?\\" + "张三" + ".*"));
        query.limit(5);
        List<TestDemo> list = mongoTemplate.find(query, TestDemo.class);
        List<TestDemo> list1 = mongoTemplate.find(query1, TestDemo.class);
        System.out.println("list:"+list);
        System.out.println("list1:"+list1);
    }
    //测试删除
    @Test
    public void testDel(){
        mongoTemplate.remove(Query.query(Criteria.where("name").is("张三")),TestDemo.class);
    }
}

第二种方式使用继承MongoRepository   

添加实体类

package com.xsp.spm.domain;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
 * @Author:xsp
 * @Description:
 * @name:User
 * @Date:2024/9/14 17:24
 */
@Data
@Document(collection = "users")
public class User {
    @Id
    private String id;
    @Indexed(unique = true)
    private String name;
    private Integer age;
}

repository层

package com.xsp.spm.repository;
import com.xsp.spm.domain.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
/**
 * @Author:xsp
 * @Description:
 * @name:UserRepository
 * @Date:2024/9/14 17:25
 */
@Repository
public interface UserRepository extends MongoRepository<User, String> {
}

controller层

package com.xsp.spm.controller;
import com.xsp.spm.domain.User;
import com.xsp.spm.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.*;
/**
 * @Author:xsp
 * @Description:
 * @name:UserController
 * @Date:2024/9/14 17:26
 */
@RestController
public class UserController {
    @Autowired
    private UserRepository userRepository;
    // 添加
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }
    // 详细
    @GetMapping("/{id}")
    public User getUser(@PathVariable String id) {
        return userRepository.findById(id).orElse(null);
    }
    // 删除
    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable String id) {
        userRepository.deleteById(id);
    }
    // 修改
    @PutMapping("/{id}")
    public User updateUser(@PathVariable String id, @RequestBody User user) {
        User userFromDb = userRepository.findById(id).orElse(null);
        if (userFromDb != null) {
            userFromDb.setName(user.getName());
            userFromDb.setAge(user.getAge());
            return userRepository.save(userFromDb);
        }
        return null;
    }
    // 列表
    @GetMapping
    public Iterable<User> getAllUsers() {
        return userRepository.findAll();
    }
}

mongoDB 中MongoRepository和MongoTemplate的区别

MongoRepository‌:

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

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

MongoTemplate‌:

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

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

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

4.navicat连接mongoDB

到此这篇关于SpringBoot集成Mongodb的文章就介绍到这了,更多相关SpringBoot集成Mongodb内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文