目录
2.4: 抽象出一个存入mongoDB的数据对象,加入需要往mongoDB中存入一个用户;
2.5 这里就直接在controller接口里面进行mongoDB的增删改查操作了。
2.6 controller中的Result等是通用返回对象,可以根据自己需要定义
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数据库中数据情况: