springboot整合mongoDB案例

目录

1.版本说明:

2.代码演示:

2.1: 目录结构如下

2.2: pom 文件依赖引入

2.3 配置application.yml文件

2.4: 抽象出一个存入mongoDB的数据对象,加入需要往mongoDB中存入一个用户;

2.5 这里就直接在controller接口里面进行mongoDB的增删改查操作了。

2.6 controller中的Result等是通用返回对象,可以根据自己需要定义

3.测试效果:


mongoDB是一种非关系型的数据库,对mongoDB的数据操作类似操作文档。创建数据库,然后再创建集合,mongoDB中的集合等同于mysql中的表。
安装好mongoDB以后,我们再安装桌面可视化软件studio 3t for mongodb,这是一款很强大的mongoDB管理软件,下载和安装也很简单。

1.版本说明:

springcloud:Greenwich.SR5

springboot:2.1.4.RELEASE

mongoDB:4.0.22

2.代码演示:

2.1: 目录结构如下

2.2: pom 文件依赖引入

  <dependencies>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--mongodb相关的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

2.3 配置application.yml文件

server:
  port: 1020

spring:
  main:
    # 允许bean定义重写
    allow-bean-definition-overriding: true
  application:
    name: IDEAL-MONGODB
  data:
    mongodb:
      uri: "mongodb://127.0.0.1:27017/test"


eureka:
  instance:
    prefer-ip-address: true # 注册服务的时候使用服务的ip地址
    hostname: elasticsearch-service
  client:
    service-url:
      defaultZone: http://localhost:1001/eureka/
    # 是否注册自身到eureka服务器
    register-with-eureka: true
    fetch-registry: true

 

2.4: 抽象出一个存入mongoDB的数据对象,加入需要往mongoDB中存入一个用户;

package com.demo.mongodb.dto;

import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.Date;

@Document
@Data
public class User {

    @Id
    private Long id;

    private String username;

    private String message;

    private String company;

    private String hobby;

    private Date createDate;

    private Date updateDate;

    @Override
    public String toString () {
        return JSONObject.toJSONString(this);
    }
}

2.5 这里就直接在controller接口里面进行mongoDB的增删改查操作了。

package com.demo.mongodb.controller;

import com.demo.mongodb.dto.Result;
import com.demo.mongodb.dto.User;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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.http.MediaType;
import org.springframework.web.bind.annotation.*;

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

@Api(tags = "mongoDB模块")
@RestController
@Slf4j
@RequestMapping("/mongodb")
public class MongodbController {

    @Autowired
    private MongoTemplate template;

    @ApiOperation(value = "新增单个用户", notes = "新增单个用户")
    @PostMapping(value = "/insert")
    public Result insertObj(@RequestBody  User user){
        log.info("新增用户入参=={}",user.toString());
        user.setCreateDate(new Date());
        User save = template.save(user);
        log.info("插入数据==={}",save.toString());
        return Result.ok("新增成功");
    }

    @ApiOperation(value = "批量新增用户", notes = "批量新增用户")
    @PostMapping(value = "/batchInsert")
    public Result batchInsert(@RequestBody List<User> users){
        log.info("批量新增用户入参=={}",users.toString());
        for(User item : users){
            template.save(item);
        }
        return Result.ok("批量新增成功");
    }

    @ApiOperation(value = "根据id查询", notes = "批量新增用户")
    @PostMapping(value = "/getById")
    public Result getById(@RequestBody  User user){
        Query query = new Query(Criteria.where("_id").is(user.getId()));
        User one = template.findOne(query, User.class);
        return Result.ok(one);
    }

    @ApiOperation(value = "根据用户名称查询", notes = "根据用户名称查询")
    @PostMapping(value = "/getByUsername")
    public Result getByUsername(@RequestBody  User user){
        Query query = new Query(Criteria.where("username").is(user.getUsername()));
        User one = template.findOne(query, User.class);
        return Result.ok(one);
    }

    @ApiOperation(value = "更新用户hobby和company", notes = "更新用户hobby和company")
    @PutMapping(value = "/updateUser")
    public Result updateUser(@RequestBody  User user){
        log.info("更新用户入参==={}",user.toString());
        Query query = new Query(Criteria.where("_id").is(user.getId()));
        Update update  = new Update();
        update.set("hobby",user.getHobby());
        update.set("company",user.getCompany());
        UpdateResult updateResult = template.updateFirst(query, update, User.class);
        log.info("更新的结果==={}",updateResult.toString());
        return Result.ok("更新成功!");
    }

    @ApiOperation(value = "根据id删除用户", notes = "根据id删除用户")
    @DeleteMapping(value = "/deleteByID")
    public Result deleteByID(@RequestBody  User user){
        log.info("根据id删除用户请求==={}",user.toString());
        DeleteResult remove = template.remove(user);
        log.info("删除的结果==={}",remove);
        return Result.ok("删除成功");
    }


}

2.6 controller中的Result等是通用返回对象,可以根据自己需要定义

package com.demo.mongodb.dto;

import lombok.Data;
import lombok.Getter;

import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * Description:统一接口返回体模板
 * @Author yangshilei
 * @Date 2019-05-15 14:16
 */
@Data
@Getter
public class Result<T> implements Serializable {

  private static final Integer SUCCESS_CODE = 200;
  private static final Integer REEOR_CODE = 400;
  private static final String SUCCESS_MESSAGE = "ok";

  private Integer code;

  private String message;

  private T data;

  protected Result(){}

  protected Result(Integer code, String message, T data){
    this.code = code;
    this.message = message;
    this.data = data;
  }

  public static <T> Result<T> ok(T data){
    return new Result<>(SUCCESS_CODE,SUCCESS_MESSAGE,data);
  }

  /**
   * 正确信息描述
   * @param message
   * @param <T>
   * @return
   */
  public static <T> Result<T> ok(String message) {
    return new Result(SUCCESS_CODE,message,null);
  }

  /**
   * 正确信息描述,同时返回错误信息
   * @param message
   * @param data
   * @param <T>
   * @return
   */
  public static <T> Result<T> ok(String message,T data){
    return new Result<T>(SUCCESS_CODE,message,data);
  }

  /**
   * 错误信息描述,适用于不需要规范化错误码的场景
   * @param message
   * @param <T>
   * @return
   */
  public static <T> Result<T> err (String message){
    return new Result<T>(REEOR_CODE,message,null);
  }

  /**
   * 错误信息描述,适用于需要规范错误码的场景
   * @param errMessage
   * @param <T>
   * @return
   */
  public static <T> Result<T> err(@NotNull  ErrMessage errMessage){
    return new Result<>(errMessage.code(),errMessage.desc(),null);
  }


}

错误码定义与描述:

package com.demo.mongodb.dto;

/**
* @Author: yangshilei
* @Date: 2019/5/15 15:04
*/
public interface ErrMessage {

  /**
   * 错误响应状态码
   * @return
   */
  int code();

  /**
   * 错误描述
   * @return
   */
  String desc();
}

 

3.测试效果:

swagger测试打开接口,没用引入的可以使用postman进行测试:进行增删改查等操作

查看mongoDB数据库中数据情况:


猜你喜欢

转载自blog.csdn.net/qq_37488998/article/details/112479860