SpringBoot整合MongoDB实现ResultFul风格接口

前言

在昨日整理的是一些只是在mongodb内部实现的操作,但是想要实现在外部,那就要想在后台以接口的方式给到前台,今天简单的做一些整合操作

ResultFul风格

ResultFul是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

就是为了不同的前端和后端进行信息交互,Resultful API是一种比较流行的一种API规范。结构清晰符合标准,易于理解、扩展方便,便于前端开发者进行区分访问接口资源。

我在之前的几篇文章中都有使用到过,在不同的操作下可使用如下

名称作用
GET获取资源,一般用于查询操作
POST创建资源,一般用于添加操作
PUT更新资源,一般用于修改操作
DELETE删除资源,一般用于删除资源

添加依赖

Swagger2

因为我比较喜欢使用Swagger做测试,所以我在Maven中引入了这个依赖,在之前我有写过一篇如何使用Swagger的文章,可以参考,链接我也直接放至如下

Swagger参考链接: https://blog.csdn.net/UncleFujii/article/details/112935134

		<!--Swagger2-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.4.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.4.0</version>
        </dependency>

mongodb

		<!--mongodb-->
        <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>

结构

因为只是一个测试,所以结构上没做正式开发这么规范,结构如下
在这里插入图片描述

配置文件(properties)

server.port=8080
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.database=testdb
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017

实体层

用于放一些实体属性,对应的则是Mongodb内的字段

/**
 * @Author uncletj
 * @Date 2021/4/13 17:15
 * @Version SpringBoot 2.2.2
 * @projectName
 */
public class User {

    private String id;		//id
    private String name;	//名称
    private String gender;  //性别
    private int age;        //年龄
    private String hobby;   //兴趣爱好

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
}

配置层

这个层次用来放Swageer的配置类,源码如下

import com.google.common.collect.Sets;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @Author uncletj
 * @Date 2021-04-14 11:38
 * @Version SpringBoot 2.2.2
 * @projectName
 */
@Configuration//配置类
@EnableSwagger2//开启Swagger2的自动配置
public class SwaggerConfig {
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                //协议,http或https
                .protocols(Sets.newHashSet("http"))
                .apiInfo(apiInfo())
                .select()
                //controller扫描路径
                .apis(RequestHandlerSelectors.basePackage("com.mongodb.demo.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("测试接口文档")
                .version("1.0")
                .description("测试接口")
                .build();
    }
}

业务层(Service)

这个用来实现一下业务操作,我就直接没去自己创建一些接口来实现了,而是直接写了一下方式做实现,具体如下:

import com.mongodb.client.result.UpdateResult;
import com.mongodb.demo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
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.stereotype.Service;

import java.util.List;

/**
 * @Author uncletj
 * @Date 2021/4/14 10:07
 * @Version SpringBoot 2.2.2
 * @projectName
 */
@Service
public class UserService {

    @Autowired
    private MongoOperations mongoOperations;


    /**
     * insert存在则不做处理,不存在则插入
     * @param user
     */
    public void insert(User user){
        mongoOperations.insert(user);
    }

    /**
     * 根据userid删除文档
     * @param id
     */
    public void remove(String id){
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(id));
        mongoOperations.remove(query,User.class);
    }

    /**
     * 根据id更新文档
     * @param user
     * @return
     */
    public UpdateResult update(User user){
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(user.getId()));
        Update update = new Update();
        update.set("name",user.getName());
        update.set("age",user.getAge());
        update.set("gender",user.getGender());
        update.set("hobby",user.getHobby());
        //只修改第一个数据
        return  mongoOperations.updateFirst(query, update,User.class);

    }

    /**
     * 查询所有
     * @return
     */
   public List<User>getByList(){
        return mongoOperations.findAll(User.class);
   }

    /**
     * 单条件查询,find查询所有
     * @param id
     * @return
     */
    public List<User> findByUid(String id){
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(id));
        return mongoOperations.find(query,User.class);
    }
}

控制层(Controller)

这个层次用于实现业务操作,并给出api接口让外部进行一系列操作,具体实现如下

import com.mongodb.demo.pojo.User;
import com.mongodb.demo.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author uncletj
 * @Date 2021/4/13 17:18
 * @Version SpringBoot 2.2.2
 * @projectName
 */
@RestController
@RequestMapping("/user")
@Api(description = "测试接口")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 添加用户
     * @param user
     * @return
     */
    @PostMapping("save")
    @ApiOperation(value = "添加用户")
    public String save(@RequestBody User user) {
        userService.insert(user);
        return "SSUCCESS";
    }

    /**
     * 根据id删除用户
     * @param id
     * @return
     */
    @DeleteMapping("delete")
    @ApiOperation(value = "根据id删除用户")
    @ApiImplicitParam(name = "id",value = "id",dataType = "String",paramType = "query")
    public String deleteByuserid(String id) {
        userService.remove(id);
        return "SSUCCESS";
    }

    /**
     * 获取所有数据
     * @return
     */
    @GetMapping("/list")
    public List<User> getByList(){
        return userService.getByList();
    }

    /**
     * 单条件查询
     * @param id
     * @return
     */
    @GetMapping("findById")
    @ApiOperation(value = "单条件查询")
    @ApiImplicitParam(name = "id",value = "id",dataType = "String",paramType = "query")
    public List<User> findByuserid(String id) {
        return userService.findByUid(id);
    }

    /**
     * 根据id更新文档
     * @param user
     * @return
     */
    @PutMapping("update")
    @ApiOperation(value = "根据id更新文档")
    public String updateByusserid(@RequestBody User user) {
        userService.update(user);
        return "SSUCCESS";
    }
}

测试

具体实现上面的代码已能够实现一些简单操作,下面在进行一轮测试展示

list

获取所有数据信息
在这里插入图片描述

add

创建数据信息
在这里插入图片描述

findById

根据Id查询单条数据信息,既然刚刚添加了一条信息,那么就根据id看是否能把刚刚这条信息查询出来
在这里插入图片描述

update

修改一般是根据id去修改一条数据信息,刚刚添加的数据也是已经被查询出来了,那试试能不能把这条数据修改一遍
在这里插入图片描述
修改完之后在去查询一下所有的数据,看修改的数据是否成功
在这里插入图片描述
刚刚修改了这两个属性的信息,说明更新成功

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

藤井大叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值