[toc]

In other words, entering a company, if often CURD, is not very boring, but I have not thought, write module after module, how can make their code slightly better? This article is based on this background, arises at the historic moment.

1. Prepare

If we create a project based on SpringBoot+MyBatis, then we can use the abstract module described above. With so much code written, can CURD be so simple?

2. Start

2.1 Define an ORM entity

/ * * *@description: Urban operation business entity *@Date: 2019/8/15 1:35 PM *@Author: Shi Dongdong -Seig Heil */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CityOperationBuz extends BaseEntity {
    private static final long serialVersionUID = -8803890133202877257L;

    @ApiModelProperty(value="Province name")
    private String provinceName;

    @ApiModelProperty(value="City RegCode")
    private String cityRegCode;

    @ApiModelProperty(value="City National Code")
    private String cityGbCode;

    @ApiModelProperty(value="City name")
    private String cityName;

    @ApiModelProperty(value="Type of Business")
    private Integer buzType;

    @ApiModelProperty(value="Creation time")
    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(a) {}public Integer getId(a) {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id; }}Copy the code

2.2 Define a VO entity

VO is used to present the Entity view layer.

/ * * *@description: City operation Business VO *@Date: 2019/8/15 1:35 PM *@Author: Shi Dongdong -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="Province name")
    private String provinceName;

    @ApiModelProperty(value="City RegCode")
    private String cityRegCode;

    @ApiModelProperty(value="City National Code")
    private String cityGbCode;

    @ApiModelProperty(value="City name")
    private String cityName;

    @ApiModelProperty(value="Type of Business")
    private Integer buzType;

    @ApiModelProperty(value="Creation time")
    private Date createdTime;
}
Copy the code

2.3 Defining a Form

The Form is used to encapsulate page query criteria.

/ * * *@description: Urban operation business entity *@Date: 2019/8/15 1:35 PM *@Author: Shi Dongdong -Seig Heil */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class CityOperationBuzForm extends BaseForm {

    private static final long serialVersionUID = -2192092804864722810L;

    @ApiModelProperty(value="Province name")
    private String provinceName;

    @ApiModelProperty(value="City RegCode")
    private String cityRegCode;

    @ApiModelProperty(value="City National Code")
    private String cityGbCode;

    @ApiModelProperty(value="City name")
    private String cityName;

    @ApiModelProperty(value="Type of Business")
    private Integer buzType;
}

/ * * *@description: Form base class *@Date: 4:13 PM 2020/3/5 *@Author: Shi Dong Dong -Heil Hitler */
public class BaseForm implements Serializable{
    private static final long serialVersionUID = -7659575678494184665L;
    /**
     * 主键id
     */
    private Integer id;
    /** ** encoding */
    private String code;
    /** * name */
    private String name;
    /** * start time */
    private String beginTime;
    /** ** deadline */
    private String endTime;
    /** * whether to page */
    private boolean paging = true;

    public Integer getId(a) {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCode(a) {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName(a) {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getBeginTime(a) {
        return beginTime;
    }

    public void setBeginTime(String beginTime) {
        this.beginTime = beginTime;
    }

    public String getEndTime(a) {
        return endTime;
    }

    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }

    public boolean isPaging(a) {
        return paging;
    }

    public void setPaging(boolean paging) {
        this.paging = paging; }}Copy the code

2.4 define Mapper

/ * * *@description: City operation business Mapper *@Date : 2019/8/15 下午1:45
 * @Author: Shi Dongdong -Seig Heil */
public interface CityOperationBuzMapper extends BaseMapper<CityOperationBuz.Integer.CityOperationBuzForm> {}Copy the code

As shown above, we simply inherit from BaseMapper and declare CityOperationBuz for our Entity, the primary key type Integer, and the query parameter class CityOperationBuzForm.

2.5 define Service

/ * * *@description: City operations Service *@Date : 2019/8/15 下午1:45
 * @Author: Shi Dongdong -Seig Heil */
public interface CityOperationBuzService extends BaseService<CityOperationBuz.Integer.CityOperationBuzForm> {}Copy the code

As shown above, you only need to inherit from BaseService; the other protocols are the same as BaseMapper.

2.6 Defining the Service Implementation Class

/ * * *@description: City operations Service *@Date : 2019/8/15 下午1:45
 * @Author: Shi Dongdong -Seig Heil */
@Service
public class CityOperationBuzServiceImpl extends BaseServiceImpl<CityOperationBuz.Integer.CityOperationBuzForm> implements CityOperationBuzService {

    @Autowired
    CityOperationBuzMapper cityOperationBuzMapper;
}
Copy the code

As shown above, you need to inherit BaseServiceImpl and inject the dependency CityOperationBuzMapper.

2.7 define the Facade

/ * * *@description: City operations business Facade *@Date: 2019/8/15 1:49 PM *@Author: Shi Dongdong -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(a) {
        return new CityOperationBuzConverter();
    }

    @Override
    public Result<String> saveRecord(CityOperationBuz record) {
        if(! isModify(record)){ record.setCreatedTime(TimeTools.createNowTime()); }return super.saveRecord(record); }}Copy the code

As shown above, we need to inherit BaseFacadeImpl and inject the dependency CityOperationBuzService, which defines our VO class as CityOperationBuzVo

2.8 Define the VO converter

/ * * *@description: City operation business converter *@Date: 2019/8/15 1:48 PM *@Author: Shi Dongdong -Seig Heil */
public class CityOperationBuzConverter extends BaseConverter<CityOperationBuzVo.CityOperationBuz> {
    @Override
    public CityOperationBuzVo convert( CityOperationBuz bo) {
        CityOperationBuzVo re = new  CityOperationBuzVo();
        BeanUtils.copyProperties(bo, re);
        returnre; }}Copy the code

2.9 define the Controller

/ * * *@description: City operations *@Date: 2019/8/15 1:56 PM *@Author: Shi Dongdong -Seig Heil */
@RestController
@RequestMapping("/cityOperationBuz")
@Api(description = "City operations business",tags = "City operations business")
public class CityOperationBuzController {

    final String LOG_TITLE = "[City Operation Business]";

    @Autowired
    CityOperationBuzFacade cityOperationBuzFacade;

    /** * Load list *@return* /
    @PostMapping("/loadRecords")
    @ApiOperation("Load list")
    @LogMonitor(value = LOG_TITLE, action = @Action("Load list"))
    public Result<PageVO<CityOperationBuzVo>> loadRecords(@RequestBody PageForm<CityOperationBuzForm> form) {
        return cityOperationBuzFacade.loadRecords(form);
    }


    /** * for details *@return* /
    @GetMapping("/queryRecord/{id}")
    @ApiOperation("Enquiry Details")
    @LogMonitor(value = LOG_TITLE, action = @Action("Enquiry Details"))
    public Result<List<CityOperationBuzVo>> queryRecord(@PathVariable Integer id) {
        return cityOperationBuzFacade.queryRecord(id);
    }

    /** * save *@return* /
    @PostMapping("/saveRecord")
    @ApiOperation("Save")
    @LogMonitor(value = LOG_TITLE, action = @Action("Save"))
    @OperateLogger(value = 100017,refId = "id",modifyCondition = "null ! = id")
    public Result<String> saveRecord(@RequestBody CityOperationBuz cityOperationBuz) {
        return cityOperationBuzFacade.saveRecord(cityOperationBuz);
    }

    /** * delete *@return* /
    @GetMapping("/delRecord/{id}")
    @ApiOperation("Delete")
    @LogMonitor(value = LOG_TITLE, action = @Action("Delete"))
    @OperateLogger(value = 100017,logType = OperateLogger.LogType.D)
    public Result<String> delRecord(@PathVariable Integer id) {
        returncityOperationBuzFacade.deleteRecord(id); }}Copy the code

3. Summary

From the above example, we can see that with the existing abstract package of BaseModule, we can implement a basic CURD module with very little code. The code is very clean and tidy.

Source: gitee.com/suze/base-m…

The following is the qr code picture of my official account, welcome to follow.

Original text: blog.csdn.net/shichen2010…