Code written so much, CURD can be so simple (under)?

[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 type Integer, and query parameter class CityOperationBuzForm.

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 dependencies CityOperationBuzMapper.

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 dependencies CityOperationBuzService, 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.

No public

Original: blog.csdn.net/shichen2010...

Guess you like

Origin juejin.im/post/5e80942ff265da47e90cf12d