一、前言
最近 ITAEM 团队的一个前端女生使用了 node+MongoDB 做了一个视频网站,效果相当不错,这勾起了笔者尘封已久的 MongoDB 记忆,于是结合目前最为流行的后台框架 SpringBoot,做了一个一般项目常用后台的接口 CRUD 操作
1、基础
MongoDB 的简单 增删改查
使用 mongoose 操作 MongoDB 数据库之 增删改查
2、参考
① Spring Boot 中使用 MongoDB 增删改查
② 《SpringBoot2 精髓》李家智 著
二、代码
talk is cheap show me the code
1、代码结构
2、实体
package com.cun.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
/**
* 实体层
* @author linhongcun
*
*/
@Document(collection="t_user")
public class User {
@Id // 指定ID
private String id;
@Field("userName") // 指定域名,覆盖默认
private String userName;
@Field("password") // 指定域名,覆盖默认
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3、控制层
package com.cun.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.cun.entity.User;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* 控制层
* @author linhongcun
*
*/
@RestController
@RequestMapping("/user")
@EnableSwagger2
public class UserController {
@Autowired
MongoTemplate mongoTemplate;
/**
* 1、增
* @param user
* @return
*/
@PostMapping("/insert")
public User insertUser(User user) {
// 可以用 save 替代
mongoTemplate.insert(user);
return user;
}
/**
* 2、查
* @param id
* @return
*/
@GetMapping("/get/{id}")
public User getUserById(@PathVariable String id) {
return mongoTemplate.findById(id, User.class);
}
/**
* 3、删
* @param id
* @return
*/
@DeleteMapping("/delete/{id}")
public User deleteUserById(@PathVariable String id) {
User user = mongoTemplate.findById(id, User.class);
mongoTemplate.remove(user);
return user;
}
/**
* 4、改
* @param user
* @return
*/
@PutMapping("/update")
public User updateUser(User user) {
// save 可增可改!
mongoTemplate.save(user);
return user;
}
/**
* 5、全
* @return
*/
@GetMapping("/get/all")
public List<User> getAllUsers() {
return mongoTemplate.findAll(User.class);
}
/**
* 6、查 ++:属性、分页
* @param user
* @param page
* @param size
* @return
*/
@GetMapping("/select/{page}/{size}")
public Map<String, Object> selectUserByProperty(User user, @PathVariable int page, @PathVariable int size) {
// 条件
Criteria criteria1 = Criteria.where("userName").is(user.getUserName());
Criteria criteria2 = Criteria.where("password").is(user.getPassword());
Query query = new Query();
if (user.getUserName() != null) {
query.addCriteria(criteria1);
}
if (user.getPassword() != null) {
query.addCriteria(criteria2);
}
// 数量
long total = mongoTemplate.count(query, User.class);
// 分页
query.skip((page - 1) * size).limit(size);
List<User> data = mongoTemplate.find(query, User.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("data", data);
map.put("total", total);
return map;
}
}
4、yml
server:
context-path: /
port: 80
spring:
data:
mongodb:
uri: mongodb://120.79.197.131:27018/test #编码自动为UTF-8,没有中文乱码!
5、pom
还有 Swagger 依赖
<!-- swagger生成接口API -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- 接口API生成html文档 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
三、效果
Swagger测试页面:http://localhost/swagger-ui.html
可以大胆地进行测试,接口均测试过,都是没有问题的