mybatis-plus代码生成器自定义模板

最近接受到一个任务,代码生成器的开发。当时自己有两种思路来实现,第一种:自己写个程序,通过java代码生成,第二种:寻找第三方插件来支持,引用他们的。当时自己开发了一个代码生成器程序,但是不够完善,不能全面满足需求,还是借鉴他人意见,网上查询资料,发现Mybatis-plus插件还是挺不错,分享给大家,不过本人才疏学浅,若有说的不对,还望大家指出来。
 

  1.    Mybatis-plus官网,有兴趣的可以了解了解,学习学习的。
  2.    官网配置代码生成器的例子。

  废话不多说,看看代码就懂了  

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@Data
@Slf4j
public class CodeGeneratorTwo {
 
 
    @Autowired
    private CodeTwoGeneratorConfig codeTwoGeneratorConfig;
 
    private final String path = "D:/Project/poi-code-creator";
 
    @Test
    public void generateCode() throws IOException {
 
        String author = codeTwoGeneratorConfig.getAuthor();
        String packagePath = codeTwoGeneratorConfig.getPackagePath();
        String[] tables = codeTwoGeneratorConfig.getTables().split(",");
 
        //获取数据库连接
        GlobalConfig config = new GlobalConfig();
        String dbUrl = "你的数据库url链接";
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.POSTGRE_SQL)
                .setUrl(dbUrl)
                .setUsername("你的数据库用户名称")
                .setPassword("数据库用户账号")
                .setDriverName("org.postgresql.Driver")
                .setSchemaName("poit_cloud");
 
        //类型转换
        dataSourceConfig.setTypeConvert(new PostgreSqlTypeConvert() {
            @Override
            public PropertyInfo processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                System.out.println("转换类型:" + fieldType);
                // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。
                if (fieldType.contains("numeric")) {
                    return DbColumnType.DOUBLE;
                } else {
                    return super.processTypeConvert(globalConfig, fieldType);
                }
            }
        });
 
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig
                .setCapitalMode(true)
                .setLogicDeleteFieldName("rec_status")
                .setEntityLombokModel(false)
                .setNaming(NamingStrategy.underline_to_camel)
//                .setTablePrefix("eff_","ent_i_","ent_s_","ent_r_","eqp_i_","eqp_r_","eqp_s_","prod_i_","prod_r_","prod_s_","sys_i_")
                .setInclude(tables)//修改替换成你需要的表名,多个表名传数组
                .setEntityLombokModel(true);//是否使用lombok
        config.setActiveRecord(true)
                .setAuthor(author)
                .setOutputDir("src/main/java")
                .setEnableCache(false)
                .setBaseColumnList(false)
                .setBaseColumnList(false)
                .setIdType(IdType.UUID)//主键类型
                .setFileOverride(true)
                .setServiceName("%sService")
                .setSwagger2(true);  //是否使用Swagger
 
        InjectionConfig ic = new InjectionConfig() {
            @Override
            public void initMap() {
                this.setMap(getMap());
            }
        };
        TemplateConfig tc = new TemplateConfig();
        tc.setXml(null)
                .setServiceImpl(null)
                .setController("template/comtroller.java.vm")
                .setEntity("template/entity.java.vm")
                .setService("template/service.java.vm");
 
        //添加add 请求对象
        List<FileOutConfig> foc = new ArrayList<>();
        foc.add(new FileOutConfig("/template/addVo.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return path + "/src/main/java/com/poi/code/creator/vo/req/" + "Add" + tableInfo.getEntityName() + "Req"
                        + StringPool.DOT_JAVA;
            }
        });
        //添加update 请求对象
        foc.add(new FileOutConfig("/template/updateVo.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return path + "/src/main/java/com/poi/code/creator/vo/req/" + "Update" + tableInfo.getEntityName() + "Req"
                        + StringPool.DOT_JAVA;
            }
        });
        //添加list请求对象
        foc.add(new FileOutConfig("/template/listVo.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return path + "/src/main/java/com/poi/code/creator/vo/req/" + "List" + tableInfo.getEntityName() + "Req"
                        + StringPool.DOT_JAVA;
            }
        });
        //添加分页请求对象
        foc.add(new FileOutConfig("/template/pageVo.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return path + "/src/main/java/com/poi/code/creator/vo/req/" + "Page" + tableInfo.getEntityName() + "Req"
                        + StringPool.DOT_JAVA;
            }
        });
        ic.setFileOutConfigList(foc);
        new AutoGenerator()
                .setGlobalConfig(config)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setTemplate(tc)
                .setCfg(ic)
                .setPackageInfo(
                        new PackageConfig()
                                .setParent(packagePath)
                                .setController("controller")
                                .setEntity("entity")
                ).execute();
    }
}

controller的模板(controller.java.vm)内容如下:

package ${package.Controller};
 
 
import com.poi.code.creator.service.${table.serviceName} ;
 
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestBody;
 
import com.poi.code.creator.vo.base.ApiResp;;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
 
import ${package.Service}.${table.serviceName};
import ${package.Entity}.${entity};
import com.poi.code.creator.vo.base.req.BaseReq;
import com.poi.code.creator.vo.req.Add${entity}Req;
import com.poi.code.creator.vo.req.Update${entity}Req;
import com.poi.code.creator.vo.req.List${entity}Req;
import com.poi.code.creator.vo.req.Page${entity}Req;
 
/**
* @author ${author}
* @since ${date}
*/
@Api(description = "$!{table.comment}" )
@RestController
@RequestMapping("/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end" )
@Slf4j
public class ${table.controllerName}  {
 
    @Autowired
    private ${table.serviceName}  ${table.entityPath}Service;
 
    @ApiOperation("列表" )
    @GetMapping("/list" )
    public ApiResp list(List${entity}Req req) {
        try {
            return ${table.entityPath}Service.list(req);
        } catch (Exception e) {
            log.error("list error",e);
            return new ApiResp().code("500").message("系统繁忙,请稍后再试");
        }
    }
 
    @ApiOperation("分页" )
    @GetMapping("/page" )
    public ApiResp page(Page${entity}Req req) {
        try {
             return  ${table.entityPath}Service.page(req);
        } catch (Exception e) {
             log.error("page error",e);
             return new ApiResp().code("500").message("系统繁忙,请稍后再试");
        }
    }
 
    @ApiOperation("获取详情" )
    @GetMapping("/get" )
    public ApiResp get(BaseReq req,#foreach($field in ${table.fields})#if(${field.keyFlag})@RequestParam("${field.propertyName}")${field.propertyType} ${field.propertyName}#end#end) {
        try {
            return  ${table.entityPath}Service.get(#foreach($field in ${table.fields})#if(${field.keyFlag}) ${field.propertyName}#end#end);
        } catch (Exception e) {
            log.error("get error",e);
            return new ApiResp().code("500").message("系统繁忙,请稍后再试");
        }
    }
 
    @ApiOperation("添加" )
    @PostMapping("/add" )
    public ApiResp add(@RequestBody Add${entity}Req req) {
        try {
            return  ${table.entityPath}Service.add(req);
        } catch (Exception e) {
           log.error("add error",e);
           return new ApiResp().code("500").message("系统繁忙,请稍后再试");
        }
    }
 
    @ApiOperation("修改" )
    @PostMapping("/modify" )
    public ApiResp modify(@RequestBody Update${entity}Req req) {
        try {
           return  ${table.entityPath}Service.modify(req);
        } catch (Exception e) {
           log.error("modify error",e);
           return new ApiResp().code("500").message("系统繁忙,请稍后再试");
        }
    }
 
    @ApiOperation("删除" )
    @GetMapping("/delete" )
    public ApiResp delete(BaseReq req,#foreach($field in ${table.fields})#if(${field.keyFlag})@RequestParam("${field.propertyName}")${field.propertyType} ${field.propertyName}#end#end) {
         try {
              return  ${table.entityPath}Service.delete(#foreach($field in ${table.fields})#if(${field.keyFlag}) ${field.propertyName}#end#end);
         } catch (Exception e) {
             log.error("delete error",e);
             return new ApiResp().code("500").message("系统繁忙,请稍后再试");
         }
     }
 }

 

entity.java.vm

package ${package.Entity};
 
    #foreach($pkg in ${table.importPackages})
    import ${pkg};
    #end
    #if(${swagger2})
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    #end
    #if(${entityLombokModel})
    import lombok.Data;
    #end
import com.baomidou.mybatisplus.annotation.TableName;
/**
 * <p>
 * ${entity}对象
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
#if(${entityLombokModel})
@Data
#end
@TableName("${table.name}")
#if(${swagger2})
@ApiModel(value = "${entity}对象", description="$!{table.comment}")
#end
#if(${superEntityClass})
public class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end {
#elseif(${activeRecord})
public class ${entity} extends Model<${entity}> {
#else
public class ${entity} implements Serializable {
#end
    private static final long serialVersionUID = 1L;
## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})
    #if(${field.keyFlag})
        #set($keyPropertyName=${field.propertyName})
    #end
    #if("$!field.comment" != "")
        #if(${swagger2})
    @ApiModelProperty(value = "${field.comment}")
        #end
    #end
    #if(${field.keyFlag})
    #if(${field.keyIdentityFlag})
    @TableId(value = "${field.name}", type = IdType.AUTO)
    #elseif(!$null.isNull(${idType}) && "$!idType" != "")
    @TableId(value = "${field.name}", type = IdType.${idType})
    #elseif(${field.convert})
    @TableId("${field.name}")
    #end
    #elseif(${field.fill})
        #if(${field.convert})
    @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
        #else
    @TableField(fill = FieldFill.${field.fill})
        #end
    #elseif(${field.convert})
    @TableField("${field.name}")
    #end
    #if(${logicDeleteFieldName}==${field.name})
    @TableLogic
    #end
    private ${field.propertyType} ${field.propertyName};
#end
#if(!${entityLombokModel})
    #foreach($field in ${table.fields})
        #if(${field.propertyType.equals("boolean")})
            #set($getprefix="is")
        #else
            #set($getprefix="get")
        #end
    public ${field.propertyType} ${getprefix}${field.capitalName}() {
            return ${field.propertyName};
            }
        #if(${entityBuilderModel})
        public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
        #else
        public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
        #end
            this.${field.propertyName} = ${field.propertyName};
        #if(${entityBuilderModel})
                return this;
        #end
            }
    #end
#end
 
#if(${entityColumnConstant})
    #foreach($field in ${table.fields})
    public static final String ${field.name.toUpperCase()} = "${field.name}";
    #end
#end
#if(${activeRecord})
    @Override
    protected Serializable pkVal() {
       #if(${keyPropertyName})
         return this.${keyPropertyName};
       #else
         return null;
       #end
    }
#end
#if(!${entityLombokModel})
@Override
public String toString() {
        return "${entity}{" +
    #foreach($field in ${table.fields})
        #if($!{foreach.index}==0)
                "${field.propertyName}=" + ${field.propertyName} +
        #else
                ", ${field.propertyName}=" + ${field.propertyName} +
        #end
    #end
        "}";
        }
#end
}

service.java.vm

package ${package.Service};
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
import com.poi.code.creator.vo.base.ApiResp;
import com.poi.code.creator.vo.base.req.BaseReq;
import com.poi.code.creator.vo.req.Add${entity}Req;
import com.poi.code.creator.vo.req.Update${entity}Req;
import com.poi.code.creator.vo.req.List${entity}Req;
import com.poi.code.creator.vo.req.Page${entity}Req;
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${package.Entity}.${entity};
 
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
 
import java.util.Date;
 
import ${superServiceClassPackage};
 
/**
 * <p>
 * ${entity}服务类
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@Service
public class ${table.serviceName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}>  {
 
    public ApiResp list(List${entity}Req req)throws Exception{
        String keyword = req.getKeyword();
        QueryWrapper<${entity}> queryWrapper = new QueryWrapper<>();
        if (!StringUtils.isEmpty(keyword)) {
            queryWrapper.like("", req.getKeyword());
        }
        return new ApiResp().data(baseMapper.selectList(queryWrapper));
    }
 
    public ApiResp page(Page${entity}Req req)throws Exception{
        String keyword = req.getKeyword();
        IPage<${entity}> page = new Page<>(req.getPageNum(), req.getPageSize());
        QueryWrapper<${entity}> queryWrapper = new QueryWrapper<>();
        if (!StringUtils.isEmpty(keyword)) {
            queryWrapper.like("", keyword);
        }
        return new ApiResp().data(baseMapper.selectPage(page, queryWrapper));
    }
 
    public ApiResp add(Add${entity}Req req)throws Exception{
        ${entity} data = new  ${entity}();
        BeanUtils.copyProperties(req, data);
        #foreach($field in ${table.fields})
            #if(${field.propertyName.equals("createTime")})
        data.set${field.capitalName}(new Date());
            #end
        #end
        baseMapper.insert(data);
        return new ApiResp().data(#foreach($field in ${table.fields})#if(${field.keyFlag})data.get${field.capitalName}()#end#end);
    }
 
    public ApiResp modify(Update${entity}Req req)throws Exception{
        ${entity} data = new  ${entity}();
        BeanUtils.copyProperties(req, data);
        #foreach($field in ${table.fields})
           #if(${field.propertyName.equals("updateTime")} || ${field.propertyName.equals("modifyTime")})
        data.set${field.capitalName}(new Date());
           #end
        #end
        baseMapper.updateById(data);
        return new ApiResp().data(Boolean.TRUE);
    }
 
    public ApiResp delete(#foreach($field in ${table.fields})#if(${field.keyFlag})${field.propertyType} ${field.propertyName}#end#end)throws Exception{
        baseMapper.deleteById(#foreach($field in ${table.fields})#if(${field.keyFlag})${field.propertyName}#end#end);
        return new ApiResp().data(Boolean.TRUE);
    }
 
    public ApiResp get(#foreach($field in ${table.fields})#if(${field.keyFlag})${field.propertyType} ${field.propertyName}#end#end)throws Exception{
        return new ApiResp().data(baseMapper.selectById(#foreach($field in ${table.fields})#if(${field.keyFlag})${field.propertyName}#end#end));
    }
}

接下来VO对象,请求对象,返回对象  

package com.poi.code.creator.vo.req;
 
 
#foreach($pkg in ${table.importPackages})
#end
#if(${swagger2})
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
#end
#if(${entityLombokModel})
#end
import lombok.Data;
 
import java.io.Serializable;
import java.util.Date;
 
import com.poi.code.creator.vo.base.req.BaseReq;
 
import io.swagger.annotations.ApiModel;
 
/**
 * <p>
 * Add${entity}Req 请求对象
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@Data
@ApiModel(value = "${entity}新增请求对象", description = "$!{table.comment}")
public class Add${entity}Req extends BaseReq implements Serializable {
 
    private static final long serialVersionUID = 1L;
    #foreach($field in ${table.fields})
    #if("$!field.comment" != "")
    #if(${swagger2} && !${field.propertyName.equals("recStatus")}  &&!${field.propertyName.equals("updateTime")}  &&!${field.propertyName.equals("createTime")} &&!${field.propertyName.equals("modifyTime")}&&!${field.keyFlag})
    @ApiModelProperty(value = "${field.comment}")
    private ${field.propertyType} ${field.propertyName};
            #end
        #end
    #end
}
 
 
 
 
 
package com.poi.code.creator.vo.req;
 
 
#foreach($pkg in ${table.importPackages})
#end
#if(${swagger2})
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
#end
#if(${entityLombokModel})
#end
import lombok.Data;
 
import java.io.Serializable;
import java.util.Date;
 
import com.poi.code.creator.vo.base.req.BaseReq;
 
import io.swagger.annotations.ApiModel;
 
/**
 * <p>
 * List${entity}Req对象
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@Data
@ApiModel(value = "List${entity}列表请求对象", description = "$!{table.comment}")
public class List${entity}Req extends BaseReq implements Serializable {
 
    @ApiModelProperty(value = "关键字查询", required = false)
    private String keyword;
 
}
 
 
 
package com.poi.code.creator.vo.req;
 
 
#foreach($pkg in ${table.importPackages})
#end
#if(${swagger2})
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
#end
#if(${entityLombokModel})
#end
import lombok.Data;
 
import java.io.Serializable;
import java.util.Date;
 
import com.poi.code.creator.vo.base.req.BaseReq;
 
import io.swagger.annotations.ApiModel;
 
/**
 * <p>
 * Update${entity}Req 请求对象
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@Data
@ApiModel(value = "${entity}更新请求对象", description = "$!{table.comment}")
public class Update${entity}Req extends BaseReq implements Serializable {
 
    private static final long serialVersionUID = 1L;
    #foreach($field in ${table.fields})
        #if(${field.keyFlag})
    @ApiModelProperty(value = "${field.comment}", required = true)
    private ${field.propertyType} ${field.propertyName};
        #end
        #if("$!field.comment" != "")
            #if(${swagger2} && !${field.propertyName.equals("recStatus")}  &&!${field.propertyName.equals("updateTime")}  &&!${field.propertyName.equals("createTime")} &&!${field.propertyName.equals("modifyTime")}&&!${field.keyFlag})
    @ApiModelProperty(value = "${field.comment}")
    private ${field.propertyType} ${field.propertyName};
            #end
        #end
    #end
}
 
 
package com.poi.code.creator.vo.req;
 
 
#foreach($pkg in ${table.importPackages})
#end
#if(${swagger2})
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
#end
#if(${entityLombokModel})
#end
import lombok.Data;
 
import java.io.Serializable;
import java.util.Date;
 
import com.poi.code.creator.vo.base.req.BasePageReq;
 
import io.swagger.annotations.ApiModel;
 
/**
 * <p>
 * Page${entity}Req对象
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@Data
@ApiModel(value = "List${entity}列表请求对象", description = "$!{table.comment}")
public class Page${entity}Req extends BasePageReq implements Serializable {
 
    @ApiModelProperty(value = "关键字查询", required = false)
    private String keyword;
 
}

猜你喜欢

转载自www.cnblogs.com/llzs/p/11730655.html
今日推荐