SpringBoot2.x使用MongoDB存储数据

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: `MongoDB`在企业级项目中一般用于存储文档信息、图片资源等,`MongoDB`的内容完全是以 `JSON`字符串的形式进行存储的,所以我们在获取数据时通过简单的 `反序列化`就可以完成与项目内的实体类转换,不过这个过程是自动的,不需要我们手动进行反序列化处理。

MongoDB在企业级项目中一般用于存储文档信息、图片资源等,MongoDB的内容完全是以 JSON字符串的形式进行存储的,所以我们在获取数据时通过简单的 反序列化就可以完成与项目内的实体类转换,不过这个过程是自动的,不需要我们手动进行反序列化处理。

本章目标

完成简单的SpringBootMongoDB的自动化整合,让我们像是使用spring-data-jpa的形式来完成MongoDB的数据操作。

准备MongDB

我们使用MongoDB官方提供的安装方式进行安装,下面是对应系统的官方安装文档:

  1. Linux下安装MongoDB
  2. Windows下安装MongoDB
  3. OSX下安装MongoDB

创建用户

我们需要创建一个用户,用于本章的使用,如果你是OSX系统,只需要打开终端输入mongo命令就可以进入MongoDB的管理界面。

1. 创建数据库
使用 use test; 命令可以创建一个名为`test`的数据库
2. 创建数据库所有者角色的用户
db.createUser(
   {
     user: "test",
     pwd: "123456",
     roles: [ { role: "dbOwner", db: "test" } ]
   }
);

用户创建完成后就可以进行本章的编码了,环境有了之后我们接下来需要进行环境的连接进行操作数据。


构建项目

我们使用IDEA创建一个新的SpringBoot项目,在pom.xml配置文件内添加我们本章所需要的依赖,如下所示:

<dependencies>
    <!--mongodb依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <!--lombok依赖-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <!--fastjson依赖-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.44</version>
    </dependency>
    <!--测试依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

根据mongodb的依赖我们可以看到Spring家族式的设计,把所有操作数据的依赖都进行归类到spring-boot-starter-data-xxx下,我们比较常用到的如:spring-boot-starter-data-jpaspring-boot-starter-data-redis等。


MongoRepository

spring-boot-starter-data-mongodb确实采用了跟spring-boot-starter-data-jpa同样的方式来完成接口代理类的生成,并且提供了一些常用的单个对象操作的公共方法,MongoRepository接口作用与JPARepository一致,继承了该接口的业务数据接口就可以提供一个被Spring IOC托管的代理实现类,这样我们在注入业务数据接口时就会完成代理实现类的注入。
废话不多说了,下面我们直接来创建一个名为CustomerRepository的数据接口,该接口继承MongoRepository<T,PK>,如下所示:

/**
 * 客户数据接口
 * 继承自MongoRepository接口
 *
 * @author:于起宇 <br/>
 * ===============================
 * Created with IDEA.
 * Date:2018/3/28
 * Time:下午7:41
 * 简书:http://www.jianshu.com/u/092df3f77bca
 * ================================
 */
public interface CustomerRepository extends MongoRepository<Customer, String> {
}

MongoRepository <T,PK>同样也是采用了两个泛型参数,
T:实体类类型。
PKT实体类内的主键类型,如:String。


自定义实体类

我们在CustomerRepository 接口内使用了Customer实体类作为泛型参数,下面我们简单创建Customer实体类,内容如下所示:

@Data
public class Customer implements Serializable {
    /**
     * 客户编号
     */
    @Id
    public String id;
    /**
     * 客户名称
     */
    public String firstName;
    /**
     * 客户姓氏
     */
    public String lastName;

    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

同样我们需要通过@Id注解进行设置主键,不过这个主键的值是MongoDB自动生成的,生成的主键值是具有唯一性的。


添加配置

代码已经准备好了,我们只需要添加MongoDB的一些配置信息就大功告成了,下面我们需要在application.yml配置文件内添加如下配置:

spring:
  application:
    name: spring-boot-mongodb
  data:
    mongodb:
      uri: mongodb://localhost/test
      username: test
      password: 123456

在上面配置的uri内的test即为数据库的名称,username配置我们自定义的用户名称,password配置为自定义用户设置的密码。

上面我们的代码已经全部编写完成,接下来我们需要进行测试,来查看我们的CustomerRepository是否已经生效.


测试

我们使用CommandLineRunner接口进行简单的项目运行后就执行Customer文档内的数据操作,修改Chapter51Application入口类,添加CommandLineRunner接口的实现,如下所示:

/**
 * 程序入口类
 * @author yuqiyu
 */
@SpringBootApplication
public class Chapter51Application implements CommandLineRunner {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(Chapter51Application.class);
    /**
     * 客户数据接口注入
     */
    @Autowired
    private CustomerRepository repository;

    public static void main(String[] args) {
        SpringApplication.run(Chapter51Application.class, args);
        logger.info("【【【【【SpringBoot整合Mongodb启动完成.】】】】】");
    }

    @Override
    public void run(String... args) {
        // 删除全部
        repository.deleteAll();
        // 添加一条数据
        repository.save(new Customer("于", "起宇"));
        // 查询全部
        logger.info(JSON.toJSONString(repository.findAll()));
    }
}

run方法内

  1. 删除了Customer文档内的全部内容
  2. 执行了保存数据的操作
  3. 查询出本次保存的数据内容

下面我们来运行下程序查看控制台的效果,如下所示:

[{"firstName":"于","id":"5ad4be1cab73ac0bdc23bd9a","lastName":"起宇"}]
【【【【【SpringBoot整合Mongodb启动完成.】】】】】

已经可以正常的输出了MongoDB我们添加到文档内的数据,在上面说到了id这个字段的特殊性,这是个分布式唯一性的字段值,是一个短板的md5格式的字符串。


修改默认扫描路径

如果你不打算使用SpringBoot默认的扫描路径(SpringBoot默认扫描XxxApplication类的同级以及所有子级的package)可以通过@EnableMongoRepositories注解配置basePackages属性完成自定义的MongoDBMongoRepository实现类的扫描,如下所示:

@SpringBootApplication
@EnableMongoRepositories(basePackages = "com.hengyu.chapter51")
public class Chapter51Application implements CommandLineRunner { }

总结

本章简单的讲解了SpringBoot集成MongoDB,它与JPA有着同样的数据操作方式,数据接口通过继承MongoRepository就可以让我们可以使用与JPA相同的方法进行操作MongoDB文档内的数据,从而减少了学习的成本。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2天前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第9天】mongoDB查看数据的插入日志
21 4
|
2天前
|
SQL Java 数据库
springboot用户创建的业务数据只能是同一组织能看的见
springboot用户创建的业务数据只能是同一组织能看的见
|
2天前
|
监控 NoSQL MongoDB
mongoDB查看数据的插入日志
【5月更文挑战第2天】mongoDB查看数据的插入日志
38 0
|
22小时前
|
SQL Java 调度
SpringBoot使用@Scheduled定时任务录入将要过期任务数据
SpringBoot使用@Scheduled定时任务录入将要过期任务数据
|
1天前
|
前端开发 关系型数据库 MySQL
SpringBoot-----从前端更新数据到MySql数据库
SpringBoot-----从前端更新数据到MySql数据库
8 1
|
2天前
|
人工智能 NoSQL atlas
Fireworks AI和MongoDB:依托您的数据,借助优质模型,助力您开发高速AI应用
我们欣然宣布MongoDB与 Fireworks AI 正携手合作让客户能够利用生成式人工智能 (AI)更快速、更高效、更安全地开展创新活动
|
2天前
|
NoSQL Java MongoDB
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
【5月更文挑战第11天】本文介绍了如何将非关系型数据库MongoDB与Spring Boot框架集成,以实现高效灵活的数据管理。Spring Boot简化了Spring应用的构建和部署,MongoDB则以其对灵活数据结构的处理能力受到青睐。集成步骤包括:添加MongoDB依赖、配置连接信息、创建数据访问对象(DAO)以及进行数据操作。通过这种方式,开发者可以充分利用两者优势,应对各种数据需求。在实际应用中,结合微服务架构等技术,可以构建高性能、可扩展的系统。掌握MongoDB与Spring Boot集成对于提升开发效率和项目质量至关重要,未来有望在更多领域得到广泛应用。
【MongoDB 专栏】MongoDB 与 Spring Boot 的集成实践
|
2天前
|
存储 NoSQL MongoDB
【MongoDB 专栏】MongoDB 的 GridFS:存储与检索大文件
【5月更文挑战第10天】MongoDB&#39;s GridFS 是用于大规模数据和大文件存储的解决方案,它将文件分割成小块存储在不同文档中,以提升管理效率和避免性能问题。文件上传时记录元数据,通过唯一标识符实现快速检索。GridFS 提供高效存储、便捷检索和扩展性,适用于大文件管理。然而,应注意文件大小限制、数据一致性和性能优化。通过案例分析,展示了 GridFS 在实际应用中的优势和适用场景,为构建强大应用提供支持。
【MongoDB 专栏】MongoDB 的 GridFS:存储与检索大文件
|
2天前
|
JSON JavaScript Java
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
25 0
|
2天前
|
SQL Java 数据库连接
Springboot框架整合Spring JDBC操作数据
JDBC是Java数据库连接API,用于执行SQL并访问多种关系数据库。它包括一系列Java类和接口,用于建立数据库连接、创建数据库操作对象、定义SQL语句、执行操作并处理结果集。直接使用JDBC涉及七个步骤,包括加载驱动、建立连接、创建对象、定义SQL、执行操作、处理结果和关闭资源。Spring Boot的`spring-boot-starter-jdbc`简化了这些步骤,提供了一个在Spring生态中更便捷使用JDBC的封装。集成Spring JDBC需要添加相关依赖,配置数据库连接信息,并通过JdbcTemplate进行数据库操作,如插入、更新、删除和查询。