[toc]
话说进入一家公司,如果经常
CURD
,是不是感觉很枯燥,但是自己有没有想过,写了一个模块又一个模块,怎么能让自己的代码稍微提高些逼格呢?本文就是基于此背景,应运而生。
1.准备
我们如果创建的工程基于SpringBoot+MyBatis,那么接下来,就可以使用上文的抽象模块了。《代码写了那么多,CURD也可以如此简单(上)?》
2.开始
2.1 定义一个ORM实体
/**
* @description: 城市运营业务实体类
* @Date : 2019/8/15 下午1:35
* @Author : 石冬冬-Seig Heil
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CityOperationBuz extends BaseEntity {
private static final long serialVersionUID = -8803890133202877257L;
@ApiModelProperty(value="省份名称")
private String provinceName;
@ApiModelProperty(value="城市RegCode")
private String cityRegCode;
@ApiModelProperty(value="城市国标码")
private String cityGbCode;
@ApiModelProperty(value="城市名称")
private String cityName;
@ApiModelProperty(value="业务类型")
private Integer buzType;
@ApiModelProperty(value="创建时间")
private Date createdTime;
}
public class BaseEntity implements Serializable {
private static final long serialVersionUID = 3701596343879071709L;
@ApiModelProperty(
name = "id",
value = "id",
dataType = "Integer"
)
private Integer id;
public BaseEntity() {
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
}
复制代码
2.2 定义一个VO实体
VO的作用用于把entity展现的view视图层。
/**
* @description: 城市运营业务VO类
* @Date : 2019/8/15 下午1:35
* @Author : 石冬冬-Seig Heil
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CityOperationBuzVo implements Serializable {
private static final long serialVersionUID = 3103330741697197876L;
@ApiModelProperty(value="id")
private Integer id;
@ApiModelProperty(value="省份名称")
private String provinceName;
@ApiModelProperty(value="城市RegCode")
private String cityRegCode;
@ApiModelProperty(value="城市国标码")
private String cityGbCode;
@ApiModelProperty(value="城市名称")
private String cityName;
@ApiModelProperty(value="业务类型")
private Integer buzType;
@ApiModelProperty(value="创建时间")
private Date createdTime;
}
复制代码
2.3 定义一个Form
Form的作用用于封装页面查询条件。
/**
* @description: 城市运营业务实体类
* @Date : 2019/8/15 下午1:35
* @Author : 石冬冬-Seig Heil
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CityOperationBuzForm extends BaseForm {
private static final long serialVersionUID = -2192092804864722810L;
@ApiModelProperty(value="省份名称")
private String provinceName;
@ApiModelProperty(value="城市RegCode")
private String cityRegCode;
@ApiModelProperty(value="城市国标码")
private String cityGbCode;
@ApiModelProperty(value="城市名称")
private String cityName;
@ApiModelProperty(value="业务类型")
private Integer buzType;
}
/**
* @description: Form基类
* @Date : 下午4:13 2020/3/5
* @Author : 石冬冬-Heil Hitler
*/
public class BaseForm implements Serializable{
private static final long serialVersionUID = -7659575678494184665L;
/**
* 主键id
*/
private Integer id;
/**
* 编码
*/
private String code;
/**
* 名称
*/
private String name;
/**
* 开始时间
*/
private String beginTime;
/**
* 截止时间
*/
private String endTime;
/**
* 是否分页
*/
private boolean paging = true;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBeginTime() {
return beginTime;
}
public void setBeginTime(String beginTime) {
this.beginTime = beginTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
public boolean isPaging() {
return paging;
}
public void setPaging(boolean paging) {
this.paging = paging;
}
}
复制代码
2.4 定义Mapper
/**
* @description: 城市运营业务 Mapper
* @Date : 2019/8/15 下午1:45
* @Author : 石冬冬-Seig Heil
*/
public interface CityOperationBuzMapper extends BaseMapper<CityOperationBuz,Integer,CityOperationBuzForm> {
}
复制代码
如上所示,只需要继承BaseMapper,并声明规约我们的Entity的
CityOperationBuz
、主键类型Integer
、以及查询参数类CityOperationBuzForm
。
2.5 定义Service
/**
* @description: 城市运营业务 Service
* @Date : 2019/8/15 下午1:45
* @Author : 石冬冬-Seig Heil
*/
public interface CityOperationBuzService extends BaseService<CityOperationBuz,Integer,CityOperationBuzForm> {
}
复制代码
如上所示,只需要继承BaseService,其他规约跟BaseMapper相同。
2.6 定义Service实现类
/**
* @description: 城市运营业务 Service
* @Date : 2019/8/15 下午1:45
* @Author : 石冬冬-Seig Heil
*/
@Service
public class CityOperationBuzServiceImpl extends BaseServiceImpl<CityOperationBuz,Integer,CityOperationBuzForm> implements CityOperationBuzService {
@Autowired
CityOperationBuzMapper cityOperationBuzMapper;
}
复制代码
如上所示,需要继承
BaseServiceImpl
,并注入依赖CityOperationBuzMapper
。
2.7 定义Facade
/**
* @description: 城市运营业务 Facade
* @Date : 2019/8/15 下午1:49
* @Author : 石冬冬-Seig Heil
*/
@Component
@Slf4j
public class CityOperationBuzFacade extends BaseFacadeImpl<CityOperationBuzVo,CityOperationBuz,Integer,CityOperationBuzForm> {
@Autowired
CityOperationBuzService cityOperationBuzService;
@Override
protected boolean isModify(CityOperationBuz CityOperationBuz) {
return null != CityOperationBuz.getId();
}
@Override
protected BaseConverter<CityOperationBuzVo, CityOperationBuz> converter() {
return new CityOperationBuzConverter();
}
@Override
public Result<String> saveRecord(CityOperationBuz record) {
if(!isModify(record)){
record.setCreatedTime(TimeTools.createNowTime());
}
return super.saveRecord(record);
}
}
复制代码
如上所示,需要继承
BaseFacadeImpl
,并注入依赖CityOperationBuzService
,其中并规约我们的VO类是CityOperationBuzVo
2.8 定义VO的转换器
/**
* @description: 城市运营业务 转换器
* @Date : 2019/8/15 下午1:48
* @Author : 石冬冬-Seig Heil
*/
public class CityOperationBuzConverter extends BaseConverter<CityOperationBuzVo, CityOperationBuz> {
@Override
public CityOperationBuzVo convert( CityOperationBuz bo) {
CityOperationBuzVo re = new CityOperationBuzVo();
BeanUtils.copyProperties(bo, re);
return re;
}
}
复制代码
2.9 定义Controller
/**
* @description: 城市运营业务
* @Date : 2019/8/15 下午1:56
* @Author : 石冬冬-Seig Heil
*/
@RestController
@RequestMapping("/cityOperationBuz")
@Api(description = "城市运营业务",tags = "城市运营业务")
public class CityOperationBuzController {
final String LOG_TITLE = "【城市运营业务】";
@Autowired
CityOperationBuzFacade cityOperationBuzFacade;
/**
* 加载列表
* @return
*/
@PostMapping("/loadRecords")
@ApiOperation("加载列表")
@LogMonitor(value = LOG_TITLE, action = @Action("加载列表"))
public Result<PageVO<CityOperationBuzVo>> loadRecords(@RequestBody PageForm<CityOperationBuzForm> form) {
return cityOperationBuzFacade.loadRecords(form);
}
/**
* 查询详情
* @return
*/
@GetMapping("/queryRecord/{id}")
@ApiOperation("查询详情")
@LogMonitor(value = LOG_TITLE, action = @Action("查询详情"))
public Result<List<CityOperationBuzVo>> queryRecord(@PathVariable Integer id) {
return cityOperationBuzFacade.queryRecord(id);
}
/**
* 保存
* @return
*/
@PostMapping("/saveRecord")
@ApiOperation("保存")
@LogMonitor(value = LOG_TITLE, action = @Action("保存"))
@OperateLogger(value = 100017,refId = "id",modifyCondition = "null != id")
public Result<String> saveRecord(@RequestBody CityOperationBuz cityOperationBuz) {
return cityOperationBuzFacade.saveRecord(cityOperationBuz);
}
/**
* 删除
* @return
*/
@GetMapping("/delRecord/{id}")
@ApiOperation("删除")
@LogMonitor(value = LOG_TITLE, action = @Action("删除"))
@OperateLogger(value = 100017,logType = OperateLogger.LogType.D)
public Result<String> delRecord(@PathVariable Integer id) {
return cityOperationBuzFacade.deleteRecord(id);
}
}
复制代码
3.总结
透过上述示例,我们可以得出,通过已有的BaseModule的抽象封装,使得我们只需要极少的代码,就可以实现一个基础的CURD模块,代码就是那么干净,整洁。
下面的是我的公众号二维码图片,欢迎关注。