[Heel]
Words into a company, if often
CURD
, is not feeling very boring, but they have not thought about writing a module and a module, how to make your own code to improve a little more to force tweed? This article is based on this background, it came into being.
1. Prepare
If we create a project based on SpringBoot + MyBatis, then the next, you can use the module above the abstract. "Code written so much, CURD can be so simple (on)? "
2. Start
2.1 Definitions an ORM entity
/**
* @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 definition of a VO entity
VO action view for the view layer entity exhibited.
/**
* @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 Defining a Form
Form role for encapsulating the query page.
/**
* @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 Defining Mapper
/**
* @description: 城市运营业务 Mapper
* @Date : 2019/8/15 下午1:45
* @Author : 石冬冬-Seig Heil
*/
public interface CityOperationBuzMapper extends BaseMapper<CityOperationBuz,Integer,CityOperationBuzForm> {
}
复制代码
As shown above, only need to inherit BaseMapper, and declare the statute of our Entity
CityOperationBuz
, the primary key typeInteger
, and query parameter classCityOperationBuzForm
.
2.5 Service definitions
/**
* @description: 城市运营业务 Service
* @Date : 2019/8/15 下午1:45
* @Author : 石冬冬-Seig Heil
*/
public interface CityOperationBuzService extends BaseService<CityOperationBuz,Integer,CityOperationBuzForm> {
}
复制代码
As shown above, only need to inherit BaseService, other statute same with BaseMapper.
2.6 Service implementation class definitions
/**
* @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;
}
复制代码
As described above, need to inherit
BaseServiceImpl
, and injecting dependenciesCityOperationBuzMapper
.
2.7 definitions 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);
}
}
复制代码
As described above, need to inherit
BaseFacadeImpl
, and injecting dependenciesCityOperationBuzService
, and wherein the VO class is our statuteCityOperationBuzVo
2.8 defined? VO converter
/**
* @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 definitions 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. Summary
Through the above example, we can conclude that, through the existing package BaseModule abstraction, so we only need very little code, can be achieved CURD a basic module, the code is so clean and tidy.
Source: gitee.com/suze/base-m...
The following is my number two-dimensional code images public, welcome attention.
Original: blog.csdn.net/shichen2010...