SpringBoot之MongoDB
SpringBoot简化了Spring的初始搭建和开发过程,并良好的集成了各种框架,本文主要讲述SpringBoot集成Mongodb,因为Mongodb是为快速开发互联网Web应用而构建的数据库系统,其数据模型和持久化策略就是为了构建高读/写吞吐量和高自动灾备伸缩性的系统
1. 环境准备
- IDEA 2019.3
- SpringBoot 2.0
- mongodb v3.2.21
2. mongdb的安装
下载mongodb安装包 https://www.mongodb.com/download-center
选择自定义安装,在安装目录(bin同级目录)下创建data文件夹,并在data文件夹下分别创建db和log文件夹,如图:
3. 项目依赖
项目中安装了lombok插件并集成了Redis和Swagger,依赖较多,故而贴出一部分代码
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
4. 项目配置
spring:
data:
mongodb:
host: localhost
port: 27017
database: manage
5. Controller层
package com.manage.controller;
import com.manage.common.ResponseMO;
import com.manage.entity.RecordDO;
import com.manage.mo.RecordMO;
import com.manage.repository.RecordRepository;
import com.manage.utils.DateUtil;
import com.manage.utils.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
@RequestMapping("/record")
@Api(tags = "访问记录管理")
public class RecordController extends BaseController {
@Autowired
private RecordRepository recordRepository;
@PostMapping("/add")
@ApiOperation(value = "新增访问记录")
public ResponseMO addRecord(@Valid @RequestBody RecordMO recordMO) {
RecordDO recordDO = new RecordDO();
BeanUtils.copyProperties(recordMO, recordDO);
recordDO.setRecordId(StringUtil.generateUUID());
recordDO.setVisitTime(DateUtil.getCurrentTime());
recordRepository.save(recordDO);
return success(recordDO.getRecordId(), "访问记录新增成功");
}
@GetMapping("/fetch/{recordId}")
@ApiOperation(value = "获取访问记录")
public ResponseMO<RecordMO> fetchRecord(@PathVariable("recordId") String recordId) {
RecordMO recordMO = new RecordMO();
RecordDO recordDO = recordRepository.findByRecordId(recordId);
recordMO.setUserId(recordDO.getUserId());
recordMO.setIp(recordDO.getIp());
recordMO.setCity(recordDO.getCity());
recordMO.setRecordId(recordDO.getRecordId());
return success(recordMO);
}
@PutMapping("/update/{recordId}")
@ApiOperation(value = "更新记录")
public ResponseMO updateRecord(@PathVariable("recordId") String recordId,
@Valid @RequestBody RecordMO recordMO){
RecordDO recordDO = recordRepository.findByRecordId(recordId);
if (recordDO == null) {
return error("记录不存在");
}
recordDO.setIp(recordMO.getIp());
recordDO.setCity(recordMO.getCity());
recordDO.setUserId(recordMO.getUserId());
recordDO.setVisitTime(DateUtil.getCurrentTime());
recordRepository.save(recordDO);
return success("更新成功");
}
@DeleteMapping("/delete/{recordId}")
@ApiOperation(value = "删除记录")
public ResponseMO deleteRecord(@PathVariable("recordId") String recordId) {
RecordDO recordDO = recordRepository.findByRecordId(recordId);
if (recordDO == null) {
return error("记录不存在");
}
recordRepository.delete(recordDO);
return success("删除成功");
}
}
6. Repository层
package com.manage.repository;
import com.manage.entity.RecordDO;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface RecordRepository extends MongoRepository<RecordDO, String> {
RecordDO findByRecordId(String recordId);
}
7. DO层
package com.manage.entity;
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
@Data
@Document(collection = "record")
public class RecordDO {
private String recordId;
private String userId;
private String ip;
private String city;
private Long visitTime;
}
8. MO层
package com.manage.mo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class RecordMO {
@ApiModelProperty(value = "访问id")
private String recordId;
@ApiModelProperty(value = "用户id")
private String userId;
@ApiModelProperty(value = "IP地址")
private String ip;
@ApiModelProperty(value = "城市")
private String city;
}