SpringBoot整合MongoDB

MongoDB简介

  • MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案
  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,类似于JSON对象,字段值可以包含其他文档,数组及文档数组

SpringBoot整合MongoDB

创建SpringBoot项目并引入依赖


<dependency>
  <groupId>org.springframework.bootgroupId>
  <artifactId>spring-boot-starter-data-mongodbartifactId>
dependency>

<dependency>
  <groupId>cn.craccdgroupId>
  <artifactId>mongoHelperartifactId>
  <version>0.7.7version>
dependency>
<dependency>
  <groupId>io.springfoxgroupId>
  <artifactId>springfox-swagger2artifactId>
  <version>2.9.2version>
dependency>
<dependency>
  <groupId>org.projectlombokgroupId>
  <artifactId>lombokartifactId>
  <optional>trueoptional>
dependency>

完善配置文件application.yml

server:
  port: 8080
spring:
  data:
    mongodb:
      authentication-database: admin
      host: xxxx # 我在服务器上搭建的MongoDB,此处为主机号,如果是本机就填127.0.0.1
      port: 27017
      database: demo # 数据库名
      username: wzc
      password: 123456
      maxWaitTime: 120000
      #链接超时的毫秒数,0表示不超时,此参数只用在新建一个新链接时,推荐配置10,000.
      connectTimeout: 10000
      #此参数表示socket I/O读写超时时间,推荐为不超时,即 0    Socket.setSoTimeout(int)
      socketTimeout: 60000

创建实体类

User类

package com.springbootdemo.entity;

import lombok.*;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User{

    private String id;

    /**
     * 用户昵称
     */
    private String username;

    /**
     * 密码
     */
    private String password;


}

Blog类

package com.springbootdemo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.Date;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document("Blog") // 对应MongoDB中的集合名
public class Blog {

    @Id  // 此注解不可省略
    private String id;

    /**
     * 博客标题
     */
    private String title;

    /**
     * 博客内容
     */
    private String content;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 作者
     */
    private User author;

    /**
     * 标签
     */
    private List<String> tags;
}

实现增删改查

如果按照传统的方式就可以直接用mongoTemplate来操作了,但我个人认为这种方式不够简便,就引入了一个

MongoDB的工具包:mongoHelper[Gitee地址:https://gitee.com/cym1102/mongoHelper],用起来非常丝滑,类似于Mybatis-plus的方便程度。下面用该工具实现简单的增删改查,详情点击上方项目地址了解。

配置MongoConfig

package com.edu.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = {"cn.craccd"})
public class MongoConfig {
}

创建测试类

package com.springbootdemo;

import cn.craccd.mongoHelper.utils.CriteriaAndWrapper;
import cn.craccd.mongoHelper.utils.MongoHelper;
import com.springbootdemo.entity.Blog;
import com.springbootdemo.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@SpringBootTest
public class MongoDBTest {

    @Resource
    private MongoHelper mongoHelper;

    public final static String ID = "635e9af365d65b0a44e6c69b";

    @Test
    public void addRecord() {
        User user = new User("1", "小明", "123456");
        List<String> tags = new ArrayList<>();
        tags.add("编程");
        tags.add("Java");
        Blog blog = new Blog(ID, "博客标题", "博客内容", new Date(), user, tags);
        mongoHelper.insert(blog);
    }

    @Test
    public void updateRecord() {
        Blog blog = mongoHelper.findById(ID, Blog.class);
        blog.setContent("更新后的博客内容");
        mongoHelper.updateById(blog);
        System.out.println(blog);
    }

    @Test
    public void deleteRecord() {
        mongoHelper.deleteById(ID, Blog.class);
    }

    @Test
    public void searchRecord() {
        CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper(); // 条件构造器
        criteriaAndWrapper.like(Blog::getTitle, "博客");  // 模糊查询
        List<Blog> blogs = mongoHelper.findListByQuery(criteriaAndWrapper, Blog.class);
    }
}

在这里插入图片描述

运行成功,可以看到MongoDB中已经有数据了

细心的小伙伴们可能会注意到,数据库里显示的创建时间与当前时间差了8个小时,这是因为存储在MongoDB中的时间是标准时间,与中国的时区正好相差8小时,但是大家也不必担心,因为从数据库中查询出来的结果会自动换算成我们所在的时区,如下图:
在这里插入图片描述

总结

虽然MySQL已经是国内当前最流行的数据库,但在某些场景下,MongoDB这种非关系型数据库也有独特的优势。比如以上这个以博客为主题的项目,如果使用MySQL就需要创建用户、博客、标签三张表,而在MongoDB中用一个集合就可以搞定,所以大家还是要结合具体的业务场景来选择合适的数据库。

你可能感兴趣的:(SpringBoot,mongodb,spring,boot)