赞
踩
导读
在目前接触过的项目中大多数的项目都会涉及到: crud相关的操作, 哪如何优雅的编写crud操作呢?
带着这个问题,我们发现项目中大量的操作多是 创建实体 、删除实例、 修改实体、 查询单个实体、 分页查询多个实体, 我们有没有好的方式解决呢?
下面我给出crud编写的四种方式 循序渐进 ,并分析其优势劣势,希望有一种能适合你,如果你有其他方式可以留言讨论,在此权当抛砖引玉。
以下内容基于Spring Boot 、Spring MVC、 Spring Data JPA 如果你使用的也是相同的技术栈可以继续往下阅读,如果不是可以当作参考。
crud编写的四种方式
1 裸写crud
最简单最粗暴也是使用最多的一种方式,在写的多了之后可以用生成工具生成。
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
/**
* @author yangrd
* @date 2019/3/4
**/
@AllArgsConstructor
@RestController
@RequestMapping("/api/banner")
public class BannerController {
private BannerRepository repository;
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Banner save(Banner banner) {
return repository.save(banner);
}
@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void delete(@PathVariable Long id) {
repository.deleteById(id);
}
@PutMapping("/{id}")
public void update(@PathVariable("id") Banner db, @RequestBody Banner banner) {
BeanUtils.copyProperties(banner, db);
repository.save(db);
}
@GetMapping
public Page findAll(Pageable pageable) {
return repository.findAll(pageable);
}
@GetMapping("/{id}")
public Banner finOne(@PathVariable("id") Banner banner) {
return banner;
}
}
优势:能控制到代码的每一行并非所有的增删改查都需要
劣势:在业务简单的情况下会编写大量的类似代码 这个时候我们可以用泛型与继承解决 引出 AbstractCrudController
2 extend BaseCrudController
使用抽象的能力,通过抽象类对相同的代码进行封装,减少子类继续编写重复的代码。
import com.st.cms.common.spring.jpa.AbstractEntity;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.fa
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。