SpringBoot集成Mongodb的操作方法

 更新时间:2024年11月09日 14:12:05   作者:小疙瘩的编程之路  
本文介绍了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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mongodb亿级数据性能测试和压测

    Mongodb亿级数据性能测试和压测

    MongoDB是一个开源的、基于分布式文件存储的NoSQL数据库系统,它使用文档存储方式,数据结构由键值(key-value)对组成,本文给大家介绍了Mongodb亿级数据性能测试和压测,需要的朋友可以参考下
    2024-06-06
  • 深入了解MongoDB是如何存储数据的

    深入了解MongoDB是如何存储数据的

    MongoDB是一个可扩展、高性能的分布式文档存储数据库,由C 语言编写,下面这篇文章主要给大家介绍了关于MongoDB是如何存储数据的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Mongodb聚合函数count、distinct、group如何实现数据聚合操作

    Mongodb聚合函数count、distinct、group如何实现数据聚合操作

    Mongodb中自带的基本聚合函数有三种:count、distinct和group。下面我们分别来讲述一下这三个基本聚合函数及如何实现数据聚合操作,感兴趣的朋友一起学习吧
    2016-05-05
  • MongoDB查询性能优化验证及验证

    MongoDB查询性能优化验证及验证

    这篇文章主要介绍了MongoDB查询性能验证及优化的相关知识,涉及到MongoDB 查询优化原则知识点,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-02-02
  • mongodb 中rs.stauts()命令参数解析

    mongodb 中rs.stauts()命令参数解析

    MongoDB的rs.status()命令是查看副本集状态的重要工具,它可以展示副本集中各个成员的角色、健康状态、同步进度等关键信息,本文介绍mongodb 中rs.stauts()命令参数解析,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • MongoDB中创建索引需要注意的事项

    MongoDB中创建索引需要注意的事项

    这篇文章主要介绍了MongoDB中创建索引需要注意的事项,本文讲解了创建索引可能会引发的问题并给出解决方法,需要的朋友可以参考下
    2015-03-03
  • MongoDB创建一个索引而性能提升1000倍示例代码

    MongoDB创建一个索引而性能提升1000倍示例代码

    这篇文章主要给大家介绍了关于如何在MongoDB中创建一个索引而性能提升1000倍的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • MongoDB诡异问题之sh.stopBalancer卡住的解决方法

    MongoDB诡异问题之sh.stopBalancer卡住的解决方法

    这篇文章主要给大家介绍了关于MongoDB诡异问题之sh.stopBalancer卡住解决的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • mongodb分片技术_动力节点Java学院整理

    mongodb分片技术_动力节点Java学院整理

    这篇文章主要介绍了mongodb分片技术,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • MongoDB聚合运算符$toBool详解

    MongoDB聚合运算符$toBool详解

    $toBool聚合运算符将指定的值转换为布尔类型boolean,这篇文章主要介绍了MongoDB聚合运算符:$toBool的相关知识,需要的朋友可以参考下
    2024-05-05

最新评论