第五十一章:基于SpringBoot2 & MongoDB完成自动化集成本章目标为你推荐企业级核心技术学习专题准备MongDB构建项目测试总结

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

本章目标

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

为你推荐

  1. 第四十七章:SpringBoot2.0新特性 - Quartz自动化配置集成
  2. 第四十八章:SpringBoot2.0新特性 - RabbitMQ信任package设置
  3. 第四十九章:SpringBoot2.0新特性 - 你get到WebMvcConfigurer两种配置方式了吗?
  4. 第五十章:SpringBoot2.0新特性 - 岂止至今最简单redis缓存集成

企业级核心技术学习专题

专题

专题名称

专题描述

001

Spring Boot 核心技术

讲解SpringBoot一些企业级层面的核心组件

002

Spring Boot 核心技术章节源码

Spring Boot 核心技术简书每一篇文章码云对应源码

003

Spring Cloud 核心技术

对Spring Cloud核心技术全面讲解

004

Spring Cloud 核心技术章节源码

Spring Cloud 核心技术简书每一篇文章对应源码

005

QueryDSL 核心技术

全面讲解QueryDSL核心技术以及基于SpringBoot整合SpringDataJPA

006

SpringDataJPA 核心技术

全面讲解SpringDataJPA核心技术

准备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文档内的数据,从而减少了学习的成本。

本章源码已经上传到码云: SpringBoot配套源码地址:https://gitee.com/hengboy/spring-boot-chapter SpringCloud配套源码地址:https://gitee.com/hengboy/spring-cloud-chapter SpringBoot相关系列文章请访问:目录:SpringBoot学习目录 QueryDSL相关系列文章请访问:QueryDSL通用查询框架学习目录 SpringDataJPA相关系列文章请访问:目录:SpringDataJPA学习目录,感谢阅读!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术栈

Java 11 快要来了,编译运行一个命令搞定!

Java 11 马上要来了,原定于 9 月发布,还有不到 3 个月了,敬请期待更多新功能被加入到 11 当中,本文本讲的是 JEP330 这个新特性。

863
来自专栏DeveWork

Sass 与Compass 在WordPress 主题开发中的运用

一直以来都抱着这样的态度去做WordPress主题开发:每一次都尽量用上新接触的知识去开发WordPress(比如说开发移动主题接触移动Web 开发),我相信这...

1777
来自专栏Jerry的SAP技术分享

如何使用SAP CRM Marketing Survey创建一个市场问卷调查

使用事务码CRM_SURVEY_SUITE进行编辑。选中Activities这个应用类型,点击新建按钮:

1071
来自专栏大数据挖掘DT机器学习

爬取淘宝/天猫评论数据的过程

要做数据分析首先得有数据才行。对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了。本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺...

3557
来自专栏安恒信息

预警 | Struts2 REST插件存在远程代码执行漏洞(CVE-2017-9805)

漏洞描述 Struts2 是 Apache 软件基金会负责维护的一个基于MVC设计模式的 Web 应用框架开源项目。 Struts2的REST插件使用带有XSt...

32914
来自专栏工科狗和生物喵

Python爬虫小白入门(一)

开篇语 本篇文章适用人群 >有一点点语法基础,至少知道Python这个东西,如果有其他方面语言的基础那也凑合 >会一点点Linux系统的操作,最好是ubunt...

43011
来自专栏FreeBuf

MySQL绕过WAF实战技巧

一、前言 本人喜欢遇到好的东西,乐于分享,关注freebuf有段时间了,写过两篇文章,每次写写文章,不仅仅是为了挣点稿费。而是通过此平台能够认识一些安全圈的小伙...

2167
来自专栏夏时

利用微博当图床-php语言实现

3264
来自专栏BestSDK

10行代码,Python实现爬取淘宝/天猫评论

要做数据分析首先得有数据才行。对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了。本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺也...

5495
来自专栏青青天空树

node.js+vue.js搭建程序设计类课程教学辅助系统

  毕业才刚刚两个多月而已,现在想想大学生活是那么的遥不可及,感觉已经过了好久好久,社会了两个月才明白学校的好啊。。。额,扯远了,自从毕业开始就想找个时间写下毕...

571

扫码关注云+社区