生成工具类类

package com.xxx.codegen;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;import java.io.File;
import java.util.*;/*** @author momomian* @date 2021/12/28*/
public class CurdGenerator {private static String author = "codegen";private static String url = "jdbc:mysql://xxx.xx.x.xxx:3306/xxx-dev?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";private static String username = "xxx";private static String password = "xxx";//输出目录private static String outputDir = System.getProperty("user.dir") + "/codegen/src/main/java";//父包private static String parentPackage = "com.xxx";//模块名private static String moduleName = "code";//表名private static String tableName = "all";//all表示所有private static String tablePrefix = "sys_,doctor_,agent_,drug_,mer_,user_,doc,tms_,msg_";// 表有无创建时间日期字段private static boolean existDate = false;private static String createDateName = "createDate";private static String updateDateName = "updateDate";// 全局响应类名private static String allResultApiName = "R";// 处理 all 情况protected static List<String> getTables(String tables) {return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));}/*** 数据源配置*/private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig.Builder(url, username, password)//数据库查询.dbQuery(new MySqlQuery())//数据库类型转换器.typeConvert(new MySqlTypeConvert())//数据库关键字处理器.keyWordsHandler(new MySqlKeyWordsHandler());/*** 快速生成器*/private static FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(DATA_SOURCE_CONFIG);public static void main(String[] args) {genCode();}/*** 全局配置*/public static void globalConfig() {fastAutoGenerator.globalConfig(builder -> {// 设置作者builder.author(author)// 开启 swagger 模式.enableSwagger()// 覆盖已生成文件.fileOverride()//禁止生成代码后自动弹出输出目录.disableOpenDir()// 时间策略.dateType(DateType.TIME_PACK)//注释日期,默认值: yyyy-MM-dd.commentDate("yyyy-MM-dd")// 指定输出目录.outputDir(outputDir);});}/*** 包配置*/public static void packageConfig() {fastAutoGenerator.packageConfig(builder -> {// 设置父包名builder.parent(parentPackage)// 设置父包模块名.moduleName(moduleName).entity("po")
//                    .service("service").serviceImpl("service.impl").mapper("mapper").xml("mapper.xml").controller("controller")//设置自定义的文件包名,默认是other,这边取消掉.other("")// 设置mapperXml生成路径.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "codegen/src/main/resources/mapper"));});}/*** 基本模板配置*/public static void templateConfig() {fastAutoGenerator.templateConfig((scanner, builder) -> builder.entity("/template/entity.java").service("/template/service.java").serviceImpl("/template/serviceImpl.java").mapper("/template/mapper.java").mapperXml("/template/mapper.xml").controller("/template/controller.java"));}/*** 自定义模板配置*/public static void injectionConfig() {Map<String, String> fileMap = new HashMap<>();Map<String, Object> fieldMap = new HashMap<>();fastAutoGenerator.injectionConfig(builder -> builder//输出文件之前消费者.beforeOutputFile((tableInfo, objectMap) -> {String entityName = tableInfo.getEntityName();Map<String, Object> aPackageMap = (Map) objectMap.get("package");objectMap.put("table_name", entityName.substring(0, 1).toLowerCase() + entityName.substring(1));objectMap.put("model", aPackageMap.get("Parent") + ".model");objectMap.put("bean", entityName.replace("PO", ""));objectMap.put("vo", entityName + "VO");objectMap.put("convert", entityName + "Convert");objectMap.put("dto", entityName + "DTO");objectMap.put("query", entityName + "Query");objectMap.put("common", "com.shuke.common");diyConfig(objectMap);//自定义生成文件配置fileMap.put("/model/vo/" + entityName + "VO.java", "/template/vo.java.vm");fileMap.put("/model/convert/" + entityName + "Convert.java", "/template/convert.java.vm");fileMap.put("/model/dto/" + entityName + "DTO.java", "/template/dto.java.vm");fileMap.put("/model/query/" + entityName + "Query.java", "/template/query.java.vm");})// 自定义属性,模板变量.customMap(fieldMap).customFile(fileMap));}/*** 自定义模板变量配置* 主要用于生成一些特殊需求** @param objectMap*/private static void diyConfig(Map<String, Object> objectMap) {//设定entityLombokModel为true,使用lombokobjectMap.put("entityLombokModel", true);//表有无创建时间日期字段objectMap.put("existDate", existDate);//时间字段set方法定义objectMap.put("setCreateDate", "set" + createDateName.substring(0, 1).toUpperCase() + createDateName.substring(1));objectMap.put("setUpdateDate", "set" + updateDateName.substring(0, 1).toUpperCase() + updateDateName.substring(1));objectMap.put("ApiResult", allResultApiName);objectMap.put("baseResultMap", true);objectMap.put("baseColumnList", true);}/*** 策略配置** @return*/public static void strategyConfig() {fastAutoGenerator.strategyConfig(builder -> {// 设置需要生成的表名builder.addInclude(getTables(tableName))// 设置过滤表前缀.addTablePrefix(tablePrefix).entityBuilder().enableLombok().logicDeleteColumnName("is_deleted").enableTableFieldAnnotation().controllerBuilder().enableRestStyle().mapperBuilder()//生成通用的resultMap.enableBaseResultMap().superClass(BaseMapper.class);});}/*** 配置模板引擎*/public static void templateEngine() {fastAutoGenerator.templateEngine(new VelocityTemplateEngine() {/*** 重写输出自定义文件方法,自定义文件输出路径*/@Overrideprotected void outputCustomFile(Map<String, String> customFile, TableInfo tableInfo, Map<String, Object> objectMap) {String otherPath = getPathInfo(OutputFile.other);customFile.forEach((key, value) -> {String fileName = String.format((otherPath + File.separator + "%s"), key);outputFile(new File(fileName), objectMap, value);});customFile.clear();}});}public static void genCode() {globalConfig();packageConfig();templateConfig();strategyConfig();injectionConfig();templateEngine();fastAutoGenerator.execute();}}

VM文件

package $!{package.Controller};import ${common}.${ApiResult};
#if(${swagger})
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.annotations.ApiIgnore;
#end
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.*;import $!{package.Entity}.$!{entity};
import $!{package.Service}.$!{table.serviceName};
import $!{model}.dto.$!{dto};
import $!{model}.vo.$!{vo};
import $!{model}.query.$!{query};
import $!{model}.convert.$!{convert};
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import com.xxx.jdbc.PageInfo;
#if(${restControllerStyle})
import org.springframework.web.bind.annotation.RestController;
#else
import org.springframework.stereotype.Controller;
#end
#if(${superControllerClassPackage})
import $!{superControllerClassPackage};
#end/*** @author $!{author}* @date $!{date}* @description $!{table.comment}控制器*/
#if(${swagger})
@Api(value = "$!{table.comment}", tags = "$!{table.comment}")
#end
#if(${restControllerStyle})
@RestController
#else
@Controller
#end
@RequestMapping("${table_name}")
#if(${kotlin})
class ${table.controllerName}#if(${superControllerClass}) : $!{superControllerClass}()#end
#else
#if(${superControllerClass})
public class $!{table.controllerName} extends $!{superControllerClass} {#else
public class $!{table.controllerName} {#end@Resourceprivate $!{table.serviceName} ${table_name}Service;/*** 获取$!{table.comment}分页列表*/#if(${swagger})@ApiOperation(value = "获取$!{table.comment}分页列表", notes = "获取$!{table.comment}分页列表")@ApiImplicitParams({@ApiImplicitParam(name = "current", required = false, value = "当前页", paramType = "form"),@ApiImplicitParam(name = "size", required = false, value = "当前页大小", paramType = "form")})#end@GetMapping(value = "/list/page")public ${ApiResult}<PageInfo<$!{vo}>> list(#if(${swagger}) @ApiIgnore #end $!{query} query,#if(${swagger}) @ApiIgnore #end Page page) {IPage<$!{entity}> pageList = ${table_name}Service.getWithPage(page, query);PageInfo<$!{vo}> resultPage = $!{convert}.INSTANCE.toPageList(pageList);return ${ApiResult}.ok(resultPage);}/*** 根据ID获取$!{table.comment}详情*/#if(${swagger})@ApiOperation(value = "根据ID获取$!{table.comment}详情", notes = "根据ID获取$!{table.comment}详情")#end@GetMapping("/get")public ${ApiResult}<$!{vo}> get(@RequestParam("id") Long id) {$!{entity} entity = ${table_name}Service.getById(id);$!{vo} vo = $!{convert}.toVo(entity);return ${ApiResult}.ok(vo);}/*** 新增${table.comment}*/#if(${swagger})@ApiOperation(value = "新增${table.comment}", notes = "新增${table.comment}")@ApiImplicitParams({#foreach($field in ${table.fields})#if(!${field.keyFlag})#if(${foreach.count}==${table.fields.size()})@ApiImplicitParam(name = "${field.propertyName}", required = false, value = "${field.comment}", paramType = "form")#else@ApiImplicitParam(name = "${field.propertyName}", required = false, value = "${field.comment}", paramType = "form"),#end#end#end})#end@PostMapping("/add")public ${ApiResult}<String> add(#if(${swagger}) @ApiIgnore #end @RequestBody $!{dto} dto) {${entity} po = ${bean}Convert.toPO(dto);#if(${existDate})po.${setCreateDate}(LocalDateTime.now());po.${setUpdateDate}(LocalDateTime.now());#endboolean save = ${table_name}Service.save(po);return save ? ${ApiResult}.ok() : ${ApiResult}.failed();}/***编辑${table.comment}*/#if(${swagger})@ApiOperation(value = "编辑${table.comment}", notes = "编辑${table.comment}")@ApiImplicitParams({#foreach($field in ${table.fields})#if(${foreach.count}==${table.fields.size()})@ApiImplicitParam(name = "${field.propertyName}", required = false, value = "${field.comment}", paramType = "form")#else@ApiImplicitParam(name = "${field.propertyName}", required = false, value = "${field.comment}", paramType = "form"),#end#end})#end@PostMapping("/update")public ${ApiResult} update(#if(${swagger}) @ApiIgnore #end @RequestBody $!{dto} dto) {${entity} po = ${bean}Convert.toPO(dto);#if(${existDate})po.${setUpdateDate}(LocalDateTime.now());#endboolean update = ${table_name}Service.updateById(po);return update ? ${ApiResult}.ok() : ${ApiResult}.failed();}##    /**
##     *移除${table.comment}
##     */
##     #if(${swagger})
##    @ApiOperation(value = "移除$!{table.comment}", notes = "移除$!{table.comment}")
##    @ApiImplicitParams({##        @ApiImplicitParam(name = "id", required = true, value = "$!{table.comment}id", paramType = "form")
##    })
##    #end
##    @PostMapping("/remove")
##    public ${ApiResult}<String> remove(@RequestParam(value = "id") Long id) {##        boolean remove = ${table_name}Service.removeById(id);
##        return remove ? ${ApiResult}.ok() : ${ApiResult}.failed();
##    }
}
#end
package $!{model}.convert;import $!{package.Entity}.$!{entity};
import ${model}.dto.$!{dto};
import ${model}.vo.$!{vo};
import java.util.ArrayList;
import java.util.List;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.xxx.jdbc.PageInfo;
import org.mapstruct.ReportingPolicy;/*** @author $!{author}* @date $!{date}* @description $!{table.comment}转换类*/@Mapper(componentModel = "spring",unmappedSourcePolicy = ReportingPolicy.IGNORE, unmappedTargetPolicy = ReportingPolicy.IGNORE )
public interface  $!{convert} {$!{entity} INSTANCE = Mappers.getMapper($!{entity}.class);$!{vo} toVo($!{entity} po);List<$!{vo}> toVo(List<$!{entity}> pos);$!{dto} toDto($!{entity} po);List<$!{dto}> toDto(List<$!{entity}> po);PageInfo<$!{vo}> toPageList(IPage<$!{entity}> pos);$!{entity} toPo($!{dto} dto);
}
package $!{model}.dto;
#if(${swagger})
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
#end
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
#foreach($pkg in ${table.importPackages})
import $!{pkg};
#end/*** @author $!{author}* @date $!{date}* @description $!{table.comment}转换类*/@Data
@NoArgsConstructor
#if(${swagger})
@ApiModel(value="$!{table.comment}转换对象")
#end
public class $!{dto} implements Serializable {private static final long serialVersionUID = 1L;## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})#if(${field.keyFlag})#set($keyPropertyName=${field.propertyName})#end#if("$!field.comment" != "")#if(${swagger})@ApiModelProperty(value = "$!{field.comment}")#else/*** $!{field.comment}*/#end#endprivate $!{field.propertyType} $!{field.propertyName};
#end
## ----------  END 字段循环遍历  ----------}
package $!{package.Entity};#foreach($pkg in ${table.importPackages})
import $!{pkg};
#end
#if(${entityLombokModel})
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
#end/*** @author $!{author}* @date $!{date}* @description $!{table.comment}实体对象*/
#if(${entityLombokModel})
@Data
#if(${superEntityClass})
@EqualsAndHashCode(callSuper = true)
#else
@EqualsAndHashCode(callSuper = false)
#end
@NoArgsConstructor
#end
#if(${table.convert})
@TableName("$!{table.name}")
#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#if(${entitySerialVersionUID})private static final long serialVersionUID = 1L;
#end
## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})#if(${field.keyFlag})
#set($keyPropertyName=${field.propertyName})
#end
#if("$!field.comment" != "")/*** $!{field.comment}*/
#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})
#end
## 乐观锁注解
#if(${versionFieldName}==${field.name})@Version
#end
## 逻辑删除注解
#if(${logicDeleteFieldName}==${field.name})@TableLogic
#endprivate $!{field.propertyType} $!{field.propertyName};
#end
## ----------  END 字段循环遍历  ----------#if(!${entityLombokModel})
#foreach($field in ${table.fields})
#if(${field.propertyType.equals("boolean")})
#set($getprefix="is")
#else
#set($getprefix="get")
#endpublic $!{field.propertyType} $!{getprefix}$!{field.capitalName}() {return $!{field.propertyName};}#if(${entityBuilderModel})public $!{entity} set$!{field.capitalName}($!{field.propertyType} $!{field.propertyName}) {#elsepublic void set$!{field.capitalName}($!{field.propertyType} $!{field.propertyName}) {#endthis.$!{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})@Overrideprotected Serializable pkVal() {#if(${keyPropertyName})return this.$!{keyPropertyName};
#elsereturn null;
#end}#end
#if(!${entityLombokModel})@Overridepublic String toString() {return "$!{entity}{" +
#foreach($field in ${table.fields})
#if($!{foreach.index}==0)$!{field}"$!{field.propertyName}=" + $!{field.propertyName} +
#else", $!{field.propertyName}=" + $!{field.propertyName} +
#end
#end"}";}
#end
}
package $!{package.Mapper};import $!{package.Entity}.$!{entity};
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import $!{model}.query.$!{query};
import org.apache.ibatis.annotations.Param;
import java.util.List;
/*** @author $!{author}* @date $!{date}* @description  $!{table.comment} Mapper 接口*/
#if(${kotlin})
interface $!{table.mapperName} : $!{superMapperClass}<$!{entity}>
#else
@Repository
public interface $!{table.mapperName} extends $!{superMapperClass}<$!{entity}> {IPage<$!{entity}> getWithPage(Page page, @Param("query") $!{query} query);/*** 新增后返回id* @param po* @return*/@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")Long insertReturnId(@Param("po") $!{entity} po);int getCountByQuery(@Param("query") ${query} query);$!{entity} getOneByQuery(@Param("query") ${query} query);List<$!{entity}> getAllByQuery(@Param("query") ${query} query);}
#end
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">#if(${enableCache})<!-- 开启二级缓存 --><cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>#end#if(${baseResultMap})<!-- 通用查询映射结果 --><resultMap id="BaseResultMap" type="${package.Entity}.${entity}">#foreach($field in ${table.fields})#if(${field.keyFlag})##生成主键排在第一位<id column="${field.name}" property="${field.propertyName}"/>#end#end#foreach($field in ${table.commonFields})##生成公共字段<result column="${field.name}" property="${field.propertyName}"/>#end#foreach($field in ${table.fields})#if(!${field.keyFlag})##生成普通字段<result column="${field.name}" property="${field.propertyName}"/>#end#end</resultMap>#end#if(${baseColumnList})<!-- 通用查询结果列 --><sql id="Base_Column_List">
#foreach($field in ${table.commonFields})${field.name},
#end${table.fieldNames}</sql>#end<!-- 表名 --><sql id="t_name">${table.name}</sql><!-- 别名 -->#set($i=${table.name.lastIndexOf('_')})#set($alias=${table.name.substring($i+1)})<sql id="t_alias">${table.name} as ${alias}</sql><select id="getWithPage" resultMap="BaseResultMap">SELECT<include refid="Base_Column_List"/>FROM ${table.name}<where>#foreach($field in ${table.fields})<if test="query.${field.propertyName} != null ">and ${field.name} = #{query.${field.propertyName}}</if>#end</where></select><select id="getCountByQuery" resultType="java.lang.Integer">select count(1)from ${table.name}<where>#foreach($field in ${table.fields})<if test="query.${field.propertyName} != null ">and ${field.name} = #{query.${field.propertyName}}</if>#end</where></select><insert id="insertReturnId" parameterType="$!{package.Entity}.$!{entity}" useGeneratedKeys="true" keyProperty="id">INSERT INTO ${table.name}(<trim suffixOverrides=",">#foreach($field in ${table.fields})<if test="po.${field.propertyName} != null">${field.name} ,</if>#end</trim>)VALUES(<trim suffixOverrides=",">#foreach($field in ${table.fields})<if test="po.${field.propertyName} != null">#{po.${field.propertyName}},</if>#end</trim>)</insert><select id="getOneByQuery"  resultType="$!{package.Entity}.$!{entity}">select <include refid="Base_Column_List"/>from ${table.name}<where>#foreach($field in ${table.fields})<if test="query.${field.propertyName} != null ">and ${field.name} = #{query.${field.propertyName}}</if>#end</where></select><select id="getAllByQuery" resultType="$!{package.Entity}.$!{entity}">select <include refid="Base_Column_List"/>from ${table.name}<where>#foreach($field in ${table.fields})<if test="query.${field.propertyName} != null ">and ${field.name} = #{query.${field.propertyName}}</if>#end</where></select>
</mapper>
package $!{model}.query;#if(${swagger})
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
#end
import lombok.Data;
import lombok.NoArgsConstructor;
#foreach($pkg in ${table.importPackages})
import $!{pkg};
#end/*** @author $!{author}* @date $!{date}* @description $!{table.comment}查询类*/@Data
@NoArgsConstructor
#if(${swagger})
@ApiModel(value="$!{table.comment}查询对象")
#end
public class $!{query} implements Serializable {private static final long serialVersionUID = 1L;## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})#if(${field.keyFlag})#set($keyPropertyName=${field.propertyName})#end#if("$!field.comment" != "")#if(${swagger})@ApiModelProperty(value = "$!{field.comment}")#else/*** $!{field.comment}*/#end#endprivate $!{field.propertyType} $!{field.propertyName};
#end
## ----------  END 字段循环遍历  ----------}
package $!{package.Service};import $!{package.Entity}.$!{entity};
import $!{superServiceClassPackage};
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import $!{model}.dto.$!{dto};
import $!{model}.query.$!{query};
import java.util.List;
/*** @author $!{author}* @date $!{date}* @description $!{table.comment} 服务类*/
#if($!{kotlin})
interface $!{table.serviceName} : $!{superServiceClass}<$!{entity}>
#else
public interface $!{table.serviceName} extends $!{superServiceClass}<$!{entity}> {IPage<$!{entity}> getWithPage(Page page, $!{query} query);$!{entity} getOneByQuery(${query} query);List<$!{entity}> getAllByQuery( ${query} query);}
#end
package $!{package.ServiceImpl};import $!{package.Entity}.$!{entity};
import $!{package.Mapper}.$!{table.mapperName};
import $!{package.Service}.$!{table.serviceName};
import $!{superServiceImplClassPackage};
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import $!{model}.dto.$!{dto};
import $!{model}.vo.$!{vo};
import $!{model}.query.$!{query};
import java.util.List;
/*** @author $!{author}* @date $!{date}* @description $!{table.comment} 服务实现类*/
@Service
@Transactional(rollbackFor = Exception.class)
#if($!{kotlin})
open class $!{table.serviceImplName} : $!{superServiceImplClass}<$!{table.mapperName}, $!{entity}>(), $!{table.serviceName} {}
#else
public class $!{table.serviceImplName} extends $!{superServiceImplClass}<$!{table.mapperName}, $!{entity}> {##    @Overridepublic IPage<$!{entity}> getWithPage(Page page, $!{query} query) {return baseMapper.getWithPage(page, query);}##    @Overridepublic $!{entity} getOneByQuery($!{query} query) {return baseMapper.getOneByQuery(query);}##    @Overridepublic List<$!{entity}> getAllByQuery($!{query} query) {return baseMapper.getAllByQuery(query);}
}
#end
package $!{model}.vo;
#if(${swagger})
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
#endimport lombok.Data;
import lombok.NoArgsConstructor;
#foreach($pkg in ${table.importPackages})
import $!{pkg};
#end
/*** @author $!{author}* @date $!{date}* @description $!{table.comment}视图对象*/@Data
@NoArgsConstructor
#if(${swagger})
@ApiModel(value="$!{vo}视图对象")
#end
public class $!{vo} implements Serializable {private static final long serialVersionUID = 1L;## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})#if(${field.keyFlag})#set($keyPropertyName=${field.propertyName})#end#if("$!field.comment" != "")#if(${swagger})@ApiModelProperty(value = "$!{field.comment}")#else/*** $!{field.comment}*/#end#endprivate $!{field.propertyType} $!{field.propertyName};
#end
## ----------  END 字段循环遍历  ----------}

properties文件

#\u4EE3\u7801\u751F\u6210\u5668\uFF0C\u914D\u7F6E\u4FE1\u606F
mainPath=com.xxx
#\u5305\u540D
package=com.xxx
moduleName=generator
#\u4F5C\u8005
author=shuke code generator
#\u8868\u524D\u7F00(\u7C7B\u540D\u4E0D\u4F1A\u5305\u542B\u8868\u524D\u7F00)
tablePrefix=table_
#\u7C7B\u578B\u8F6C\u6362\uFF0C\u914D\u7F6E\u4FE1\u606F
tinyint=Integer
smallint=Integer
mediumint=Integer
int=Integer
integer=Integer
bigint=Long
float=Float
double=Double
decimal=BigDecimal
bit=Boolean
char=String
bpchar=String
varchar=String
tinytext=String
text=String
mediumtext=String
longtext=String
date=LocalDate
datetime=LocalDateTime
timestamp=LocalDateTime

一键生成controller、service、mapper、model、po相关推荐

  1. php lmpl,tjx-cold: 用于根据配置模板,快速生成controller,service,serviceimpl 代码

    用于根据配置模板,快速生成controller,service,serviceimpl 代码(交流群 623169994 ) 为什么要开发这款插件 市面上有很多基于数据库生成代码的工具,但是我自己的工 ...

  2. JavaWeb前后端代码一键生成

    JavaWeb前后端代码一键生成 生成包括controller层/Rest类.service层.实体类dao层(可不用), 实体类. 先说下,用编码配置方式: 1.Javabean生成 public ...

  3. Spring boot 三层框架dao层、service层、controller层+实体model层

    Spring boot 三层框架dao层.service层.controller层+实体model层 model层 dao层 service层 controller层 首先创建一个springboot ...

  4. 实战:一键生成前后端代码,Mybatis-Plus代码生成器让我舒服了

    前言 在日常的软件开发中,程序员往往需要花费大量的时间写CRUD,不仅枯燥效率低,而且每个人的代码风格不统一.MyBatis-Plus 代码生成器,通过 AutoGenerator 可以快速生成 En ...

  5. LeaRun.net代码生成器 一键生成前后端代码

    自动代码生成是指根据自然语言的功能描述来生成代码.在项目开发过程中,有很多业务模块的代码是具有一定规律性的,例如controller控制器.service接口.service实现类.mapper接口. ...

  6. Thinkphp 6 + Vue 2 + ElementUI + Vxe-table 前后端分离的,一键生成代码和API接口的,通用后台管理系统 快速开发框架,开发小程序和APP的推荐框架!

    Thinkphp 6 + Vue 2 + ElementUI + Vxe-table 前后端分离的,一键生成代码和API接口的,通用后台管理系统 快速开发框架,开发小程序和APP的推荐框架! 概述 R ...

  7. IDEA使用EasyCode一键生成CURD

    一:下载安装 给大家推荐一个工具,EasyCode.可以帮我们快速开发.避免我们去写一些枯燥的CRUD操作,直接上手干,先去插件市场进行安装 作者配置 安装完毕后,进行下面配置,此处配置作者 以下为几 ...

  8. Golang Web开发一键生成各层级模板代码

    文章目录 go_project_quickstart 快速开始 要求 安装 项目实现 架构设计 代码逻辑 统一的调用逻辑 代码复用 每次写web项目,模板都是统一的,每次都要写大量冗余的代码会很烦,在 ...

  9. 一键生成mybatis

    一键生成mybatis工具 1.mybatis-generator 步骤: 步骤1:修改pom.xml,添加mybatis-generator-maven-plugin插件 <!-- mybat ...

最新文章

  1. Nodejs的模块系统以及require的机制
  2. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1075:药房管理
  3. 手动安装android的sdk
  4. ipython版本_使用pyenv切换版本后ipython无法使用解决方法
  5. django 1.8 官方文档翻译: 3-2-3 TemplateResponse 和 SimpleTemplateResponse
  6. JSK-390 计负均正【入门】
  7. 深度学习13-cnn介绍(卷积神经网络简介)
  8. (转)正则表达之零宽断言(零宽度正预测先行断言)
  9. 如何构建创新文化——技术视角
  10. java实现验证码时效,JAVA实现验证码
  11. el-table 大数据量渲染,页面卡顿的解决方案
  12. 16-MySQL基础语法(数据库)
  13. 图网络embeding transE及node2vec方法
  14. 一个realplay直接播放ftp上电影的插件
  15. [229]python3的requests类抓取中文页面出现乱码的解决办法
  16. “SaaS+PaaS+生态”三位一体,用友树立公有云flag
  17. 如何利用Python实现工作中的自动化
  18. C#winform【实现上一张、下一张挑选图片】--实战练习七
  19. 摘:戒嗔小和尚的博客一
  20. powersploit Invoke-Portscan模块

热门文章

  1. python监控摄像头或网络通常情况
  2. Cesium修改天空盒子,含实测源码,支持晴天和夕阳
  3. 在线制作思维导图网站哪个最好
  4. new115.com dz.html,网页HTML特殊字符编码对照表
  5. 控制力士乐油研阿托斯比例阀信号转换器放大器
  6. [AWS] [Root User] 分配一个IAM账号
  7. DSP28335的GPIO口功能应用
  8. manjaro时间不对,恢复正确时间
  9. 基于三维GIS的集中供热平台的三维数字化
  10. 手动清除explorer.exe病毒