前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot整合mongodb

springboot整合mongodb

作者头像
码农王同学
发布2020-03-25 10:17:04
4250
发布2020-03-25 10:17:04
举报
文章被收录于专栏:后端Coder后端Coder

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

其实这样的示例程序自己已经不止一次写过了,但是由于全部都是代码放置于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;
}

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档