想写这篇文章有好久了,可是一直没有时间坐下来去好好去写这一篇自己喜欢的文章了,也算是自己的一次总结吧。
其实这样的示例程序自己已经不止一次写过了,但是由于全部都是代码放置于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;
}
好了,整个示例程序的完整内容到这里就结束了,由于文章偏实用一点,所以文字就不过多介绍了,希望可以帮助到你。