标签:hibernate code factory 变量 column getc wired png 生成
代码生成器
hibernate mybatis 都是在做一件简化工作量的事情,重复简单的事情,认真做一次就可以,何必将宝贵时间花在不必要的事情上呢???
单表的增删改查,分页查询等,都是数据库表格建立以后需要做的操作,可是为重复的操作;
根据项目分析,可以抽取很多相同的部分,根据项目常用的功能书写demo;
pojo、vo生成的准备:
client,controller,service生成的准备:
其他的准备:
数据的准备过程:
/** * 将对象信息存放找map的集合中 * @param basePackage * @param db * @param tableName * @param className * @param service * @return */ private Map<String, Object> getRoot(String basePackage, String db, String tableName, String className, String service){ String lowerClassName =beanGenUtil.getLowerClassName(className); Map<String, Object> root = new HashMap<>(); Map<String, Object> map = new HashMap<>(); map.put("table_name", tableName); map.put("table_schema", db); Map<String,Object> tableInfo=codeMapper.selectTableInfo(map); List<Map<String, Object>> listResult = codeMapper.selectColumnsByTablename(map); beanGenUtil.mapPutJavaType(listResult); root.put("cols", listResult); root.put("table", tableName); root.put("className", className); root.put("basepackage", basePackage); root.put("tableInfo",tableInfo); root.put("lowerClassName",lowerClassName); root.put("service",service); root.put("nowDate", DateTime.now().toString("yyyy-MM-dd")); return root; }
根据项目的分层代码生成主要有基础的pojo,读写的dao和对应的xml文件,以及单表增删改查的部分
下面展示的单表增删改查的ftl文件模板:
client层(微服务对外提供接口)
package com.${service}.client; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @FeignClient("${service}") @Api(tags = "${tableInfo.TABLE_COMMENT} API文档") public interface ${className}Client { @ApiOperation(value = "新建 ${tableInfo.TABLE_COMMENT}") @PostMapping(value = "/v1-0/${lowerClassName}/save") Result<Long> save(@RequestBody @Valid ${className}SaveIVO ${lowerClassName}SaveIVO); @ApiOperation(value = "更新 ${tableInfo.TABLE_COMMENT}") @PostMapping(value = "/v1-0/${lowerClassName}/update") Result<Integer> update(@RequestBody @Valid ${className}UpdateIVO ${lowerClassName}UpdateIVO); @ApiOperation(value = "删除 ${tableInfo.TABLE_COMMENT}") @PostMapping(value = "/v1-0/${lowerClassName}/delete/{${lowerClassName}Id}") Result<Integer> delete(@PathVariable("${lowerClassName}Id") Long ${lowerClassName}Id); @ApiOperation(value = "分页查询 ${tableInfo.TABLE_COMMENT}") @GetMapping(value = "/v1-0/${lowerClassName}/query") Result<PageData<${className}OVO>> query(@ModelAttribute("${lowerClassName}PageIVO") ${className}PageIVO ${lowerClassName}PageIVO); }
controller层
package com.${service}.server.controller; import com.${service}.client.${className}Client; import com.${service}.common.vo.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; @RestController public class ${className}Controller extends BaseController implements ${className}Client { @Autowired private ${className}Service ${lowerClassName}Service; @Override public Result<Long> save(@RequestBody @Valid ${className}SaveIVO ${lowerClassName}SaveIVO){ Long data = ${lowerClassName}Service.save(${lowerClassName}SaveIVO); return Result.ok(data); } @Override public Result<Integer> update(@RequestBody @Valid ${className}UpdateIVO ${lowerClassName}UpdateIVO){ Integer data = ${lowerClassName}Service.update(${lowerClassName}UpdateIVO); return Result.ok(data); } @Override public Result<Integer> delete(@PathVariable("${lowerClassName}Id") Long ${lowerClassName}Id){ Integer data = ${lowerClassName}Service.delete(${lowerClassName}Id); return Result.ok(data); } @Override public Result<PageData<${className}OVO>> query(@ModelAttribute("${lowerClassName}PageIVO") ${className}PageIVO ${lowerClassName}PageIVO){ PageData<${className}OVO> data = ${lowerClassName}Service.query(${lowerClassName}PageIVO); return Result.ok(data); } }
service层的部分
package com.${service}.server.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.BeanUtils; import tk.mybatis.mapper.entity.Example; import com.github.pagehelper.PageHelper; import java.util.Date; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @Service @Slf4j public class ${className}Service extends BaseService { @Autowired private ${className}WriteMapper ${lowerClassName}WriteMapper; @Autowired private ${className}ReadMapper ${lowerClassName}ReadMapper; public Long save(${className}SaveIVO ${lowerClassName}SaveIVO){ ${className} saveBean = new ${className}(); BeanUtils.copyProperties(${lowerClassName}SaveIVO,saveBean); //FIXME 对应的 int saveNum = ${lowerClassName}WriteMapper.insert(saveBean); log.debug("新建,其影响条数是:{}",saveNum); return saveBean.getId(); } public PageData<${className}OVO> query(${className}PageIVO ${lowerClassName}PageIVO){ Example example = Example.builder(${className}.class).orderByAsc("createTime").build(); PageHelper.startPage(${lowerClassName}PageIVO.getPageNum(),${lowerClassName}PageIVO.getPageSize()); Example.Criteria criteria = example.createCriteria(); // criteria.andEqualTo("",); //FIXME 添加查询条件 List<${className}> queryList = ${lowerClassName}ReadMapper.selectByExample(example); return PageData.getCopyPageData(queryList,${className}.class,${className}OVO.class); } }
vo等相关的生成
package com.${service}.common.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; import java.math.BigDecimal; /** * ${tableInfo.TABLE_COMMENT} * @Date ${nowDate} */ @Data @ApiModel(value = "${tableInfo.TABLE_COMMENT}OVO") public class ${className}OVO { <#list cols as col> <#if col.field != "isDelete" > <#if col.COLUMN_COMMENT != ""> /** * ${col.COLUMN_COMMENT} */ @ApiModelProperty(value = "${col.COLUMN_COMMENT}") </#if> private ${col.javaType} ${col.field}; </#if> </#list> }
基本上就是依样画葫芦。
github代码的地址(待项目整理以后放上去)
标签:hibernate code factory 变量 column getc wired png 生成
原文地址:https://www.cnblogs.com/xiebq/p/10193153.html