springboot整合mongodb

2020-03-25 10:17:04 浏览数 (1)

想写这篇文章有好久了,可是一直没有时间坐下来去好好去写这一篇自己喜欢的文章了,也算是自己的一次总结吧。

其实这样的示例程序自己已经不止一次写过了,但是由于全部都是代码放置于gitHub这样的开源仓库里,除了在代码里面多加了一点注释性说明之外,没有一点文字说明,自己也慢慢习惯了在自己的公众号里面进行总结自己喜欢的文章了,因为我不知道我以后还不会去写代码,或许会,或许不会。

最近一段时间发现自己的另外一个能力,面对未来谁也不知道以后会是什么样子,自己也不知道自己接下来去做什么,包括之前自己从未给自己从设定什么,所以面对未来我们依然是我们。

说的体外话有点多,今天是分享的是自己之前也是很久之前用到的mongodb这样的文档型数据库了,至少目前大部分人都称其为非关系型数据库,我们还是看下百度百科对其的介绍好了。

代码语言:javascript复制
MongoDB是一个基于分布式文件存储的数据库。由C  语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

好了,上面的文章简单的介绍完了mongodb数据的大致含义,我们开始下面我们的程序了。

首先在写下面的代码之前,我们看下我们需要做的准备,首先,我们创建一个web项目时里面的pom文件内容。

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.wpw</groupId>
    <artifactId>springboot-mongo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-mongo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-commons</artifactId>
            <version>1.5.2</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

然后我这里使用的idea工具创建的web项目,所以在resoureces目录下面,我们自行创建一个application.yaml文件,里面的内容是下面的,对应的连接mongodb数据的服务器地址和端口号可以自行设置。

代码语言:javascript复制
spring:
  data:
    mongodb:
      database: test
      uri: mongodb://自己mongodb的服务器地址
      port: 27017

首先,我这里提供一个简单的实体类作为示例程序需要用到的存储对象。

代码语言:javascript复制
package com.wpw.springbootmongo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @author pc
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@Builder
public class User implements Serializable {
    private Integer id;
    private String userName;
    private String passWord;
}

好了,上面的实体类,我这里已经定义好了,接下来就是示例程序的开始了,我这里提供了增删改查的方法,里面涉及的逻辑和简单,就是针对上面的实体类简单的做的内容。

代码语言:javascript复制
package com.wpw.springbootmongo;

import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @author pc
 */
@RestController
@RequestMapping(value = "/user")
@Slf4j
public class UserController {
    private final MongoTemplate mongoTemplate;

    public UserController(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    @PostMapping(value = "/save")
    public Result saveUser() {
        User user = new User();
        user.setId(1).setUserName("公众号~2020w").setPassWord("123456");
        User savedDB = mongoTemplate.save(user, "user");
        log.info("保存到mongo里面的数据信息:{}", user);
        if (Objects.isNull(savedDB)) {
            return Result.resultError("保存失败", ResultType.ERROR_CODE);
        }
        return Result.resultSuccess("保存成功", ResultType.RIGHT_CODE);
    }

    @GetMapping(value = "/list")
    public List<User> getUser(@RequestParam(value = "userName") String userName) {
        Query query = new Query(Criteria.where("userName").is(userName));
        List<User> userList = mongoTemplate.find(query, User.class);
        if (!CollectionUtils.isEmpty(userList)) {
            return userList;
        }
        return new ArrayList<>();
    }

    @DeleteMapping(value = "/delete")
    public Result delete(@RequestParam(value = "userName") String userName) {
        DeleteResult deleteResult = mongoTemplate.remove(new Query().addCriteria(Criteria.where("userName").is(userName)), User.class);
        long deletedCount = 0L;
        if (Objects.nonNull(deleteResult)) {
            deletedCount = deleteResult.getDeletedCount();
        }
        return deletedCount > 0 ? Result.resultSuccess("删除成功", ResultType.RIGHT_CODE) : Result.resultError("删除失败", ResultType.ERROR_CODE);
    }

    @PostMapping(value = "/update")
    public Result update(@RequestParam(value = "userName") String userName, @RequestParam(value = "passWord") String passWord) {
        UpdateResult updateResult = mongoTemplate.updateFirst(new Query().addCriteria(Criteria.where("userName").is(userName)), new Update().set("passWord", passWord), User.class);
        long modifiedCount = 0L;
        if (Objects.nonNull(updateResult)) {
            modifiedCount = updateResult.getModifiedCount();
        }
        return modifiedCount > 0 ? Result.resultSuccess("更新成功", ResultType.RIGHT_CODE) : Result.resultError("更新失败", ResultType.ERROR_CODE);
    }
}

看完上面的示例程序,希望可以帮助到你,上面的示例程序很容易理解,接下来就是自己简单的封装了一下,返回的结果,以及在示例程序中用到的状态码的定义,这里的状态码设置的确实很简单了些,如果你有需要,自己可以根据需要自己去定义一些。

代码语言:javascript复制
package com.wpw.springbootmongo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

/**
 * @author pc
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@Builder
public class Result implements Serializable {
    private String message;
    private Integer code;

    public static Result resultSuccess(String message, Integer code) {
        Result result = new Result();
        return result.setMessage(message).setCode(code);
    }

    public static Result resultError(String errorMsg, Integer code) {
        return new Result().setMessage(errorMsg).setCode(code);
    }
}

下面的示例程序就是对状态码的定义了。

代码语言:javascript复制
package com.wpw.springbootmongo;

/**
 * @author pc
 */
public interface ResultType {
    /**
     * 正确待返回的code
     */
    Integer RIGHT_CODE = 200;
    /**
     * 错误待返回的code
     */
    Integer ERROR_CODE = 500;
}

好了,整个示例程序的完整内容到这里就结束了,由于文章偏实用一点,所以文字就不过多介绍了,希望可以帮助到你。

0 人点赞