1 MongoDB整合
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring:
data:
mongodb:
uri: mongodb://admin:123456@127.0.0.1:27017/demo
auto-index-creation: true
public class MongoUtil {
public static <T> Update getUpdate(T bean) {
Update update = new Update();
Map<String, Object> paramMap = getParamMap(bean);
if (CollectionUtils.isEmpty(paramMap)) {
return update;
}
for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
update.set(entry.getKey(), entry.getValue());
}
return update;
}
private static <T> Map<String, Object> getParamMap(T bean) {
Class<?> beanClass = bean.getClass();
Map<String, Method> methodMap = new HashMap<>(16);
int nameIndex;
String filedName;
for (Method method : beanClass.getMethods()) {
if (method.getParameterCount() == 0 && method.getReturnType() != Void.class) {
if (method.getName().startsWith("get")) {
nameIndex = 3;
} else if (method.getName().startsWith("is")) {
nameIndex = 2;
} else {
continue;
}
filedName = String.valueOf(method.getName().charAt(nameIndex)).toLowerCase() + method.getName().substring(nameIndex+1);
methodMap.put(filedName, method);
}
}
Map<String, Object> paramMap = new HashMap<>(16);
for (Field field : beanClass.getDeclaredFields()) {
Method method = methodMap.get(field.getName());
if (method != null) {
try {
Object value = method.invoke(bean);
if (Objects.isNull(value)) {
continue;
}
paramMap.put(field.getName(), value);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
return paramMap;
}
}
2 使用演示
@Data
@Document("demo")
public class MongoDemo {
@Id
private Integer demoId;
private String demoName;
private LocalDateTime createTime;
}
@RequestMapping("/mongo/demo")
@RestController
public class MongoDemoController {
@Autowired
private MongoOperations mongoOperations;
@PostMapping
public void save(@RequestBody MongoDemo mongoDemo) {
mongoDemo.setCreateTime(LocalDateTime.now());
mongoOperations.save(mongoDemo);
}
@PutMapping
public void update(@RequestBody MongoDemo mongoDemo) {
Update update = MongoUtil.getUpdate(mongoDemo);
Criteria criteria = new Criteria("demoId").is(mongoDemo.getDemoId());
Query query = new Query(criteria);
mongoOperations.updateFirst(query, update, MongoDemo.class);
}
@DeleteMapping("/{demoId}")
public void delete(@PathVariable("demoId") Integer demoId) {
Criteria criteria = new Criteria("demoId").is(demoId);
Query query = new Query(criteria);
mongoOperations.remove(query, MongoDemo.class);
}
@GetMapping("/{demoId}")
public MongoDemo getInfo(@PathVariable("demoId") Integer demoId) {
Criteria criteria = new Criteria("demoId").is(demoId);
Query query = new Query(criteria);
return mongoOperations.findOne(query, MongoDemo.class);
}
@GetMapping("/list")
public List<MongoDemo> list() {
Criteria criteria = new Criteria();
Query query = new Query(criteria);
return mongoOperations.find(query, MongoDemo.class);
}
@GetMapping("/page")
public Page<MongoDemo> page(int pageNum, int pageSize) {
Criteria criteria = new Criteria();
Query query = new Query(criteria);
long total = mongoOperations.count(query, MongoDemo.class);
PageRequest pageRequest = PageRequest.of(pageNum-1, pageSize);
query.with(pageRequest);
List<MongoDemo> mongoDemos = mongoOperations.find(query, MongoDemo.class);
return new PageImpl<>(mongoDemos, pageRequest, total);
}
}