一、Spring Boot 集成 MongoDB
配置文件pom.xml:
<!-- MongoDB-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置文件application.properties:
##MongoDB的链接地址
spring.data.mongodb.uri=mongodb://127.0.0.1:27017/baike
##MongoDB控制台打印日志信息
logging.level.org.springframework.data.mongodb = debug
启动Spring Boot应用,控制台输出一下提示信息,表示成功。
二、MongoDB在Spring Boot中的测试代码
文件MongoDBController代码如下:
package com.example.shopgoods.controller.mongoDB;
import com.mongodb.client.result.UpdateResult;
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.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: zp
* @Date: 2019/5/9 15:55
* @Description:
*/
@RestController
@RequestMapping("/mongoDB")
public class MongoDBController {
@Autowired
private MongoTemplate mongoTemplate;
@PostMapping("/addBaike")
public BaikeDTO addBaike(@RequestBody BaikeDTO baikeDTO) {
/**
* 如果不指定collectionName的话,数据就会插入“baikeDTO”的集合名(表名)中了
* */
mongoTemplate.insert(baikeDTO,"baike");
return baikeDTO;
}
@GetMapping("/deleteBaikeDTO/{id}")
public BaikeDTO deleteBaikeDTO(@PathVariable String id) {
BaikeDTO baikeDTO = new BaikeDTO();
baikeDTO.setId(id);
mongoTemplate.remove(baikeDTO,"baikeDTO");
return baikeDTO;
}
@GetMapping("/baike/{id}")
public BaikeDTO find(@PathVariable String id) {
/**
* collectionName即为MongoDB的集合名称,相当于mysql数据库中的表名;
* 如果不指定collectionName的话,就会从“baikeDTO”的集合名(表名)中去查询该数据
* */
BaikeDTO baikeDTO = mongoTemplate.findById(id, BaikeDTO.class, "baike");
return baikeDTO;
}
@GetMapping("/queryBaike/{id}/{id2}")
public List<BaikeDTO> queryBaike(@PathVariable String id, @PathVariable String id2) {
Criteria criteria = Criteria.where("_id").gt(id);
Criteria criteria2 = Criteria.where("_id").lt(id2);
List<BaikeDTO> baikeDTOS = new ArrayList<>();
/**
* 主键id大于id的数据
*/
baikeDTOS = mongoTemplate.find(Query.query(criteria), BaikeDTO.class, "baike");
/**
* 主键id大于id并且小于id2的数据
*/
baikeDTOS = mongoTemplate.find(Query.query(criteria.andOperator(criteria2)), BaikeDTO.class, "baike");
return baikeDTOS;
}
@PostMapping("/updateBaike")
public String updateBaike(@RequestBody BaikeDTO baikeDTO) {
Criteria criteria = Criteria.where("_id").is(baikeDTO.getId());
Update update = new Update();
update.set("desc", baikeDTO.getDesc());
/**
* mongoTemplate.updateMulti():更新符合条件的所有记录
* mongoTemplate.updateFirst():更新符合条件的第一条记录
*/
UpdateResult updateRequest = mongoTemplate.updateMulti(Query.query(criteria), update, BaikeDTO.class, "baike");
return "成功修改" + updateRequest.getModifiedCount();
}
}
实体类BaikeDTO代码如下:
package com.example.shopgoods.controller.mongoDB;
import lombok.Data;
import java.util.List;
/**
* @Author: zp
* @Date: 2019/5/9 15:57
* @Description:
*/
@Data
public class BaikeDTO {
//相当于mongoDB中的_id
private String id;
private String desc;
private List<String> tag;
//对象的别名要与mongoDB里的字段保持一致,否则无法赋值
private CommnetDTO comment;
}
子实体类CommnetDTO代码如下:
package com.example.shopgoods.controller.mongoDB;
import lombok.Data;
/**
* @Author: zp
* @Date: 2019/5/9 16:01
* @Description:
*/
@Data
public class CommnetDTO {
private Double good;
private Double bad;
}