353 | * 表名匹配 354 | *
355 | * 356 | * @param setTableName 设置表名 357 | * @param dbTableName 数据库表单 358 | * @return 359 | */ 360 | private boolean tableNameMatches(String setTableName, String dbTableName) { 361 | return setTableName.equals(dbTableName) 362 | || matches(setTableName, dbTableName); 363 | } 364 | 365 | /** 366 | *367 | * 连接父子包名 368 | *
369 | * 370 | * @param parent 父包名 371 | * @param subPackage 子包名 372 | * @return 连接后的包名 373 | */ 374 | private String joinPackage(String parent, String subPackage) { 375 | if (StringUtils.isEmpty(parent)) { 376 | return subPackage; 377 | } 378 | return parent + StringPool.DOT + subPackage; 379 | } 380 | 381 | 382 | /** 383 | * 连接路径字符串 384 | * @param parentDir 385 | * @param packageName 386 | * @return 387 | */ 388 | private String joinPath(String parentDir, String packageName) { 389 | if (StringUtils.isBlank(parentDir)) { 390 | parentDir = System.getProperty(ConstValue.JAVA_TMPDIR); 391 | } 392 | if (!StringUtils.endsWith(parentDir, File.separator)) { 393 | parentDir += File.separator; 394 | } 395 | packageName = packageName.replaceAll("\\.", StringPool.BACK_SLASH + File.separator); 396 | return parentDir + packageName; 397 | } 398 | 399 | /** 400 | * 正则表达式匹配 401 | * @param regex 402 | * @param input 403 | * @return 404 | */ 405 | private boolean matches(String regex, String input) { 406 | if (null == regex || null == input) { 407 | return false; 408 | } 409 | return Pattern.matches(regex, input); 410 | } 411 | 412 | // ================================== 相关配置 ================================== 413 | 414 | 415 | public Connection getConnection() { 416 | return connection; 417 | } 418 | 419 | public ConfigBuilder setConnection(Connection connection) { 420 | this.connection = connection; 421 | return this; 422 | } 423 | 424 | public IDbQuery getDbQuery() { 425 | return dbQuery; 426 | } 427 | 428 | public ConfigBuilder setDbQuery(IDbQuery dbQuery) { 429 | this.dbQuery = dbQuery; 430 | return this; 431 | } 432 | 433 | public GlobalConfig getGlobalConfig() { 434 | return globalConfig; 435 | } 436 | 437 | public ConfigBuilder setGlobalConfig(GlobalConfig globalConfig) { 438 | this.globalConfig = globalConfig; 439 | return this; 440 | } 441 | 442 | public DataSourceConfig getDataSourceConfig() { 443 | return dataSourceConfig; 444 | } 445 | 446 | public ConfigBuilder setDataSourceConfig(DataSourceConfig dataSourceConfig) { 447 | this.dataSourceConfig = dataSourceConfig; 448 | return this; 449 | } 450 | 451 | public Map18 | * ${entityClass} Api层 19 | *
20 | * 21 | * @author ${author} 22 | * @since ${date} 23 | */ 24 | public interface ${apiClass} { 25 | 26 | /** 27 | * 分页列表 28 | * @param request 29 | * @return 30 | */ 31 | BaseResponse11 | * ${entityClass} 数据操作层 12 | *
13 | * 14 | * @author ${author} 15 | * @since ${date} 16 | */ 17 | public interface ${daoClass} extends ${superDaoClass}<${entityClass}> { 18 | 19 | int countPage(${requestSearchClass} request); 20 | 21 | List<${entityClass}> selectPage(${requestSearchClass} request); 22 | } -------------------------------------------------------------------------------- /src/main/resources/templates/dto.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.dto}; 2 | 3 | import java.io.Serializable; 4 | 5 | import io.swagger.annotations.ApiModel; 6 | import io.swagger.annotations.ApiModelProperty; 7 | 8 | <#list fieldsImportPackage as importPackage> 9 | import ${importPackage}; 10 | #list> 11 | 12 | <#if superDtoClass??> 13 | import ${superDtoClassPackage}; 14 | #if> 15 | 16 | 17 | /** 18 | *19 | * ${tableComment} 20 | *
21 | * 22 | * @author ${author} 23 | * @since ${date} 24 | */ 25 | @ApiModel 26 | <#if superDtoClass??> 27 | public class ${dtoClass} extends ${superDtoClass} implements Serializable { 28 | <#else> 29 | public class ${dtoClass} implements Serializable { 30 | #if> 31 | 32 | private static final long serialVersionUID = 1L; 33 | 34 | <#--属性遍历--> 35 | <#list columns as pro> 36 | 37 | /** 38 | * ${pro.comment} 39 | */ 40 | @ApiModelProperty(value = "${pro.comment}") 41 | private ${pro.propertyType} ${pro.propertyName}; 42 | #list> 43 | 44 | <#--属性get||set方法--> 45 | <#list columns as pro> 46 | public ${pro.propertyType} get${pro.propertyName?cap_first}() { 47 | return this.${pro.propertyName}; 48 | } 49 | 50 | public ${dtoClass} set${pro.propertyName?cap_first}(${pro.propertyType} ${pro.propertyName}) { 51 | this.${pro.propertyName} = ${pro.propertyName}; 52 | return this; 53 | } 54 | #list> 55 | } 56 | -------------------------------------------------------------------------------- /src/main/resources/templates/dubbo.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.provider}; 2 | 3 | import com.alibaba.dubbo.config.annotation.Service; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import com.yijiupi.basic.acpect.DubboConfiguration; 6 | import com.yijiupi.basic.request.BaseResponse; 7 | import com.yijiupi.basic.request.IdRequest; 8 | import com.yijiupi.basic.utils.PageUtils; 9 | import java.util.List; 10 | import io.swagger.annotations.Api; 11 | import io.swagger.annotations.ApiOperation; 12 | 13 | import ${package.api}.${apiClass}; 14 | import ${package.service}.${serviceClass}; 15 | import ${package.request}.${requestSearchClass}; 16 | <#if isRequestAddOrUpdateEnable> 17 | import ${package.request}.${requestAddClass}; 18 | import ${package.request}.${requestUpdateClass}; 19 | <#else> 20 | import ${package.request}.${requestClass}; 21 | #if> 22 | import ${package.dto}.${dtoClass}; 23 | 24 | /** 25 | *26 | * ${entityClass} Api实现层 27 | *
28 | * 29 | * @author ${author} 30 | * @since ${date} 31 | */ 32 | @DubboConfiguration 33 | @Service 34 | @Api(value = "${tableComment}") 35 | public class ${providerClass} implements ${apiClass} { 36 | 37 | @Autowired 38 | private ${serviceClass} ${serviceClass?uncap_first}; 39 | 40 | @Override 41 | @ApiOperation(value = "查询分页" , notes="权限编码:${projectModuleCode}:${apiClass}:selectPage") 42 | public BaseResponse16 | * ${tableComment} 17 | *
18 | * 19 | * @author ${author} 20 | * @since ${date} 21 | */ 22 | <#if superEntityClass??> 23 | public class ${entityClass} extends ${superEntityClass} implements Serializable { 24 | <#else> 25 | public class ${entityClass} implements Serializable { 26 | #if> 27 | 28 | private static final long serialVersionUID = 1L; 29 | 30 | <#--属性遍历--> 31 | <#list columns as pro> 32 | 33 | /** 34 | * ${pro.comment} 35 | */ 36 | private ${pro.propertyType} ${pro.propertyName}; 37 | #list> 38 | 39 | <#--属性get||set方法--> 40 | <#list columns as pro> 41 | public ${pro.propertyType} get${pro.propertyName?cap_first}() { 42 | return this.${pro.propertyName}; 43 | } 44 | 45 | public ${entityClass} set${pro.propertyName?cap_first}(${pro.propertyType} ${pro.propertyName}) { 46 | this.${pro.propertyName} = ${pro.propertyName}; 47 | return this; 48 | } 49 | #list> 50 | } 51 | -------------------------------------------------------------------------------- /src/main/resources/templates/junit.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.junit}; 2 | 3 | import org.junit.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.boot.test.context.SpringBootTest; 7 | import org.springframework.test.context.junit4.SpringRunner; 8 | import org.springframework.test.context.ActiveProfiles; 9 | import com.yijiupi.basic.generator.menu.MenuJsonGenerator; 10 | import com.yijiupi.basic.yapi.SwaggerGenerator; 11 | import org.slf4j.Logger; 12 | import org.slf4j.LoggerFactory; 13 | import java.util.*; 14 | 15 | import com.yijiupi.basic.request.BaseResponse; 16 | import com.yijiupi.basic.request.IdRequest; 17 | import com.yijiupi.basic.utils.JacksonUtils; 18 | import ${package.api}.${apiClass}; 19 | import ${package.provider}.${providerClass}; 20 | import ${package.request}.${requestSearchClass}; 21 | <#if isRequestAddOrUpdateEnable> 22 | import ${package.request}.${requestAddClass}; 23 | import ${package.request}.${requestUpdateClass}; 24 | <#else> 25 | import ${package.request}.${requestClass}; 26 | #if> 27 | 28 | 29 | /** 30 | *31 | * ${entityClass} 单元测试(请将当前类移动到src/test/java下) 32 | *
33 | * 34 | * @author ${author} 35 | * @since ${date} 36 | */ 37 | @ActiveProfiles("dev") 38 | @RunWith(SpringRunner.class) 39 | @SpringBootTest 40 | public class ${junitClass} { 41 | 42 | private static final Logger log = LoggerFactory.getLogger(${junitClass}.class); 43 | 44 | //公共参数 45 | private static String loginUserId = ""; 46 | private static String loginUserName = ""; 47 | private static String submitToken = ""; 48 | private static String projectModuleCode = ""; 49 | 50 | @Autowired 51 | private ${apiClass} ${apiClass?uncap_first}; 52 | 53 | @Test 54 | public void selectPage(){ 55 | ${requestSearchClass} request = new ${requestSearchClass}(); 56 | //公共参数 57 | request.setLoginUserId(loginUserId); 58 | request.setLoginUserName(loginUserName); 59 | request.setPage(1); 60 | request.setPageSize(20); 61 | 62 | //业务参数... 63 | 64 | log.info("请求参数:{}", JacksonUtils.toJson(request)); 65 | BaseResponse baseResponse = ${apiClass?uncap_first}.selectPage(request); 66 | log.info("返回参数:{}", JacksonUtils.toJson(baseResponse)); 67 | } 68 | 69 | @Test 70 | public void selectAll(){ 71 | ${requestSearchClass} request = new ${requestSearchClass}(); 72 | //公共参数 73 | request.setLoginUserId(loginUserId); 74 | request.setLoginUserName(loginUserName); 75 | request.setPage(1); 76 | request.setPageSize(20); 77 | 78 | //业务参数... 79 | 80 | log.info("请求参数:{}", JacksonUtils.toJson(request)); 81 | BaseResponse baseResponse = ${apiClass?uncap_first}.selectAll(request); 82 | log.info("返回参数:{}", JacksonUtils.toJson(baseResponse)); 83 | } 84 | 85 | @Test 86 | public void getDetail(){ 87 | IdRequest request = new IdRequest(); 88 | //公共参数 89 | request.setLoginUserId(loginUserId); 90 | request.setLoginUserName(loginUserName); 91 | 92 | //业务参数... 93 | 94 | log.info("请求参数:{}", JacksonUtils.toJson(request)); 95 | BaseResponse baseResponse = ${apiClass?uncap_first}.getDetail(request); 96 | log.info("返回参数:{}", JacksonUtils.toJson(baseResponse)); 97 | } 98 | 99 | @Test 100 | public void add(){ 101 | <#if isRequestAddOrUpdateEnable> 102 | ${requestAddClass} request = new ${requestAddClass}(); 103 | <#else> 104 | ${requestClass} request = new ${requestClass}(); 105 | #if> 106 | //公共参数 107 | request.setLoginUserId(loginUserId); 108 | request.setLoginUserName(loginUserName); 109 | request.setSubmitToken(submitToken); 110 | 111 | //业务参数... 112 | 113 | log.info("请求参数:{}", JacksonUtils.toJson(request)); 114 | BaseResponse baseResponse = ${apiClass?uncap_first}.add(request); 115 | log.info("返回参数:{}", JacksonUtils.toJson(baseResponse)); 116 | } 117 | 118 | @Test 119 | public void edit(){ 120 | <#if isRequestAddOrUpdateEnable> 121 | ${requestUpdateClass} request = new ${requestUpdateClass}(); 122 | <#else> 123 | ${requestClass} request = new ${requestClass}(); 124 | #if> 125 | //公共参数 126 | request.setLoginUserId(loginUserId); 127 | request.setLoginUserName(loginUserName); 128 | request.setSubmitToken(submitToken); 129 | 130 | //业务参数... 131 | 132 | log.info("请求参数:{}", JacksonUtils.toJson(request)); 133 | BaseResponse baseResponse = ${apiClass?uncap_first}.edit(request); 134 | log.info("返回参数:{}", JacksonUtils.toJson(baseResponse)); 135 | } 136 | 137 | @Test 138 | public void delete(){ 139 | IdRequest request = new IdRequest(); 140 | //公共参数 141 | request.setLoginUserId(loginUserId); 142 | request.setLoginUserName(loginUserName); 143 | request.setSubmitToken(submitToken); 144 | 145 | //业务参数... 146 | 147 | log.info("请求参数:{}", JacksonUtils.toJson(request)); 148 | BaseResponse baseResponse = ${apiClass?uncap_first}.delete(request); 149 | log.info("返回参数:{}", JacksonUtils.toJson(baseResponse)); 150 | } 151 | 152 | @Test 153 | public void createYApiDocument(){ 154 | //生成接口文档 155 | String yApiToken = ""; 156 | SwaggerGenerator.generateAndImport(projectModuleCode, yApiToken, ${providerClass}.class); 157 | } 158 | 159 | @Test 160 | public void createMenuJsonDocument(){ 161 | //生成菜单Json文档 162 | String resourceName = "菜单名称";//一级菜单名称 163 | String frontUrl = "/hello.html";//一级菜单路径 164 | MenuJsonGenerator.createMenuJson(projectModuleCode, resourceName, frontUrl, ${providerClass}.class); 165 | } 166 | 167 | } 168 | -------------------------------------------------------------------------------- /src/main/resources/templates/mapper.xml.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 |26 | * ${entityClass} Api实现层 27 | *
28 | * 29 | * @author ${author} 30 | * @since ${date} 31 | */ 32 | @DubboConfiguration 33 | @Service 34 | @Api(value = "${tableComment}") 35 | public class ${providerClass} implements ${apiClass} { 36 | 37 | @Autowired 38 | private ${serviceClass} ${serviceClass?uncap_first}; 39 | 40 | @Override 41 | @ApiOperation(value = "查询分页" , notes="权限编码:${projectModuleCode}:${apiClass}:selectPage") 42 | public BaseResponse21 | * ${tableComment} 22 | *
23 | * 24 | * @author ${author} 25 | * @since ${date} 26 | */ 27 | @ApiModel 28 | public class ${requestClass} extends ${superRequestClass} implements Serializable { 29 | 30 | private static final long serialVersionUID = 1L; 31 | 32 | <#--属性遍历--> 33 | <#list columns as pro> 34 | <#if pro.propertyName != 'isDelete' 35 | && pro.propertyName != 'createUserid' 36 | && pro.propertyName != 'createUserName' 37 | && pro.propertyName != 'createTime' 38 | && pro.propertyName != 'createtime' 39 | && pro.propertyName != 'updateUserid' 40 | && pro.propertyName != 'updateUserName' 41 | && pro.propertyName != 'updateTime' 42 | && pro.propertyName != 'lastupdatetime' 43 | > 44 | 45 | /** 46 | * ${pro.comment} 47 | */ 48 | @ApiModelProperty(value = "${pro.comment}") 49 | <#if pro.propertyName != primaryId && pro.propertyType == 'String'> 50 | @NotBlank(message = "${pro.comment}" + notBlankMsg) 51 | <#if (pro.fieldLength < 1000)> 52 | @Size(max = ${pro.fieldLength}, message = "${pro.propertyName}最大长度不得超过${pro.fieldLength}") 53 | #if> 54 | <#elseif pro.propertyName != primaryId && pro.propertyType != 'String'> 55 | @NotNull(message = "${pro.comment}" + notBlankMsg) 56 | <#else> 57 | #if> 58 | private ${pro.propertyType} ${pro.propertyName}; 59 | #if> 60 | #list> 61 | 62 | <#--属性get||set方法--> 63 | <#list columns as pro> 64 | <#if pro.propertyName != 'isDelete' 65 | && pro.propertyName != 'createUserid' 66 | && pro.propertyName != 'createUserName' 67 | && pro.propertyName != 'createTime' 68 | && pro.propertyName != 'createtime' 69 | && pro.propertyName != 'updateUserid' 70 | && pro.propertyName != 'updateUserName' 71 | && pro.propertyName != 'updateTime' 72 | && pro.propertyName != 'lastupdatetime' 73 | > 74 | public ${pro.propertyType} get${pro.propertyName?cap_first}() { 75 | return this.${pro.propertyName}; 76 | } 77 | 78 | public ${requestClass} set${pro.propertyName?cap_first}(${pro.propertyType} ${pro.propertyName}) { 79 | <#if pro.propertyType == 'String'> 80 | this.${pro.propertyName} = ${pro.propertyName} == null ? null : ${pro.propertyName}.trim(); 81 | <#else> 82 | this.${pro.propertyName} = ${pro.propertyName}; 83 | #if> 84 | return this; 85 | } 86 | #if> 87 | #list> 88 | } -------------------------------------------------------------------------------- /src/main/resources/templates/requestAdd.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.request}; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | import javax.validation.constraints.NotNull; 7 | import javax.validation.constraints.Size; 8 | 9 | import io.swagger.annotations.ApiModel; 10 | import io.swagger.annotations.ApiModelProperty; 11 | 12 | <#list fieldsImportPackage as importPackage> 13 | import ${importPackage}; 14 | #list> 15 | 16 | import ${superRequestClassPackage}; 17 | 18 | 19 | /** 20 | *21 | * ${tableComment} 22 | *
23 | * 24 | * @author ${author} 25 | * @since ${date} 26 | */ 27 | @ApiModel 28 | public class ${requestAddClass} extends ${superRequestClass} implements Serializable { 29 | 30 | private static final long serialVersionUID = 1L; 31 | 32 | <#--属性遍历--> 33 | <#list columns as pro> 34 | <#if pro.propertyName != 'isDelete' 35 | && pro.propertyName != 'createUserid' 36 | && pro.propertyName != 'createUserName' 37 | && pro.propertyName != 'createTime' 38 | && pro.propertyName != 'createtime' 39 | && pro.propertyName != 'updateUserid' 40 | && pro.propertyName != 'updateUserName' 41 | && pro.propertyName != 'updateTime' 42 | && pro.propertyName != 'lastupdatetime' 43 | && pro.propertyName != primaryId 44 | > 45 | 46 | /** 47 | * ${pro.comment} 48 | */ 49 | @ApiModelProperty(value = "${pro.comment}") 50 | <#if pro.propertyType == 'String'> 51 | @NotBlank(message = "${pro.comment}" + notBlankMsg) 52 | <#if (pro.fieldLength < 1000)> 53 | @Size(max = ${pro.fieldLength}, message = "${pro.propertyName}最大长度不得超过${pro.fieldLength}") 54 | #if> 55 | <#else> 56 | @NotNull(message = "${pro.comment}" + notBlankMsg) 57 | #if> 58 | private ${pro.propertyType} ${pro.propertyName}; 59 | #if> 60 | #list> 61 | 62 | <#--属性get||set方法--> 63 | <#list columns as pro> 64 | <#if pro.propertyName != 'isDelete' 65 | && pro.propertyName != 'createUserid' 66 | && pro.propertyName != 'createUserName' 67 | && pro.propertyName != 'createTime' 68 | && pro.propertyName != 'createtime' 69 | && pro.propertyName != 'updateUserid' 70 | && pro.propertyName != 'updateUserName' 71 | && pro.propertyName != 'updateTime' 72 | && pro.propertyName != 'lastupdatetime' 73 | && pro.propertyName != primaryId 74 | > 75 | public ${pro.propertyType} get${pro.propertyName?cap_first}() { 76 | return this.${pro.propertyName}; 77 | } 78 | 79 | public ${requestAddClass} set${pro.propertyName?cap_first}(${pro.propertyType} ${pro.propertyName}) { 80 | <#if pro.propertyType == 'String'> 81 | this.${pro.propertyName} = ${pro.propertyName} == null ? null : ${pro.propertyName}.trim(); 82 | <#else> 83 | this.${pro.propertyName} = ${pro.propertyName}; 84 | #if> 85 | return this; 86 | } 87 | #if> 88 | #list> 89 | } -------------------------------------------------------------------------------- /src/main/resources/templates/requestSearch.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.request}; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | import javax.validation.constraints.NotNull; 7 | import javax.validation.constraints.Size; 8 | 9 | import io.swagger.annotations.ApiModel; 10 | import io.swagger.annotations.ApiModelProperty; 11 | 12 | <#list fieldsImportPackage as importPackage> 13 | import ${importPackage}; 14 | #list> 15 | 16 | import ${superRequestClassPackage}; 17 | 18 | 19 | /** 20 | *21 | * ${tableComment} 22 | *
23 | * 24 | * @author ${author} 25 | * @since ${date} 26 | */ 27 | @ApiModel 28 | public class ${requestSearchClass} extends ${superRequestClass} implements Serializable { 29 | 30 | private static final long serialVersionUID = 1L; 31 | 32 | <#--属性遍历--> 33 | <#list columns as pro> 34 | <#if pro.propertyName != 'isDelete' 35 | && pro.propertyName != 'createUserid' 36 | && pro.propertyName != 'createUserName' 37 | && pro.propertyName != 'createTime' 38 | && pro.propertyName != 'createtime' 39 | && pro.propertyName != 'updateUserid' 40 | && pro.propertyName != 'updateUserName' 41 | && pro.propertyName != 'updateTime' 42 | && pro.propertyName != 'lastupdatetime' 43 | && pro.propertyName != primaryId 44 | > 45 | 46 | /** 47 | * ${pro.comment} 48 | */ 49 | @ApiModelProperty(value = "${pro.comment}") 50 | private ${pro.propertyType} ${pro.propertyName}; 51 | #if> 52 | #list> 53 | 54 | <#--属性get||set方法--> 55 | <#list columns as pro> 56 | <#if pro.propertyName != 'isDelete' 57 | && pro.propertyName != 'createUserid' 58 | && pro.propertyName != 'createUserName' 59 | && pro.propertyName != 'createTime' 60 | && pro.propertyName != 'createtime' 61 | && pro.propertyName != 'updateUserid' 62 | && pro.propertyName != 'updateUserName' 63 | && pro.propertyName != 'updateTime' 64 | && pro.propertyName != 'lastupdatetime' 65 | && pro.propertyName != primaryId 66 | > 67 | public ${pro.propertyType} get${pro.propertyName?cap_first}() { 68 | return this.${pro.propertyName}; 69 | } 70 | 71 | public ${requestSearchClass} set${pro.propertyName?cap_first}(${pro.propertyType} ${pro.propertyName}) { 72 | <#if pro.propertyType == 'String'> 73 | this.${pro.propertyName} = ${pro.propertyName} == null ? null : ${pro.propertyName}.trim(); 74 | <#else> 75 | this.${pro.propertyName} = ${pro.propertyName}; 76 | #if> 77 | return this; 78 | } 79 | #if> 80 | #list> 81 | } -------------------------------------------------------------------------------- /src/main/resources/templates/requestUpd.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.request}; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | import javax.validation.constraints.NotNull; 7 | import javax.validation.constraints.Size; 8 | 9 | import io.swagger.annotations.ApiModel; 10 | import io.swagger.annotations.ApiModelProperty; 11 | 12 | <#list fieldsImportPackage as importPackage> 13 | import ${importPackage}; 14 | #list> 15 | 16 | import ${superRequestClassPackage}; 17 | 18 | 19 | /** 20 | *21 | * ${tableComment} 22 | *
23 | * 24 | * @author ${author} 25 | * @since ${date} 26 | */ 27 | @ApiModel 28 | public class ${requestUpdateClass} extends ${superRequestClass} implements Serializable { 29 | 30 | private static final long serialVersionUID = 1L; 31 | 32 | <#--属性遍历--> 33 | <#list columns as pro> 34 | <#if pro.propertyName != 'isDelete' 35 | && pro.propertyName != 'createUserid' 36 | && pro.propertyName != 'createUserName' 37 | && pro.propertyName != 'createTime' 38 | && pro.propertyName != 'createtime' 39 | && pro.propertyName != 'updateUserid' 40 | && pro.propertyName != 'updateUserName' 41 | && pro.propertyName != 'updateTime' 42 | && pro.propertyName != 'lastupdatetime' 43 | > 44 | 45 | /** 46 | * ${pro.comment} 47 | */ 48 | @ApiModelProperty(value = "${pro.comment}") 49 | <#if pro.propertyType == 'String'> 50 | @NotBlank(message = "${pro.comment}" + notBlankMsg) 51 | <#if (pro.fieldLength < 1000)> 52 | @Size(max = ${pro.fieldLength}, message = "${pro.propertyName}最大长度不得超过${pro.fieldLength}") 53 | #if> 54 | <#else> 55 | @NotNull(message = "${pro.comment}" + notBlankMsg) 56 | #if> 57 | private ${pro.propertyType} ${pro.propertyName}; 58 | #if> 59 | #list> 60 | 61 | <#--属性get||set方法--> 62 | <#list columns as pro> 63 | <#if pro.propertyName != 'isDelete' 64 | && pro.propertyName != 'createUserid' 65 | && pro.propertyName != 'createUserName' 66 | && pro.propertyName != 'createTime' 67 | && pro.propertyName != 'createtime' 68 | && pro.propertyName != 'updateUserid' 69 | && pro.propertyName != 'updateUserName' 70 | && pro.propertyName != 'updateTime' 71 | && pro.propertyName != 'lastupdatetime' 72 | > 73 | public ${pro.propertyType} get${pro.propertyName?cap_first}() { 74 | return this.${pro.propertyName}; 75 | } 76 | 77 | public ${requestUpdateClass} set${pro.propertyName?cap_first}(${pro.propertyType} ${pro.propertyName}) { 78 | <#if pro.propertyType == 'String'> 79 | this.${pro.propertyName} = ${pro.propertyName} == null ? null : ${pro.propertyName}.trim(); 80 | <#else> 81 | this.${pro.propertyName} = ${pro.propertyName}; 82 | #if> 83 | return this; 84 | } 85 | #if> 86 | #list> 87 | } -------------------------------------------------------------------------------- /src/main/resources/templates/service.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.service}; 2 | 3 | import com.google.common.collect.Lists; 4 | import org.apache.commons.collections.CollectionUtils; 5 | import org.springframework.beans.BeanUtils; 6 | import org.springframework.stereotype.Service; 7 | import org.springframework.transaction.annotation.Transactional; 8 | import org.slf4j.Logger; 9 | import org.slf4j.LoggerFactory; 10 | import java.util.List; 11 | import java.util.Objects; 12 | import com.yijiupi.basic.utils.IdGenerator; 13 | import com.yijiupi.basic.utils.PageUtils; 14 | import com.yijiupi.basic.request.IdRequest; 15 | 16 | import ${superServiceClassPackage}; 17 | import ${package.dao}.${daoClass}; 18 | import ${package.entity}.${entityClass}; 19 | import ${package.request}.${requestSearchClass}; 20 | <#if isRequestAddOrUpdateEnable> 21 | import ${package.request}.${requestAddClass}; 22 | import ${package.request}.${requestUpdateClass}; 23 | <#else> 24 | import ${package.request}.${requestClass}; 25 | #if> 26 | import ${package.dto}.${dtoClass}; 27 | 28 | 29 | /** 30 | *31 | * ${entityClass} 服务层 32 | *
33 | * 34 | * @author ${author} 35 | * @since ${date} 36 | */ 37 | @Service 38 | public class ${serviceClass} extends ${superServiceClass}<${daoClass}, ${entityClass}> { 39 | 40 | private static final Logger log = LoggerFactory.getLogger(${serviceClass}.class); 41 | 42 | /** 43 | * 分页列表查询 44 | * @param request 45 | */ 46 | public PageUtils<${dtoClass}> selectPage(${requestSearchClass} request) { 47 | List<${dtoClass}> resultList = Lists.newArrayList(); 48 | int count = super.baseMapper.countPage(request); 49 | List<${entityClass}> dbList = count > 0 ? super.baseMapper.selectPage(request) : Lists.newArrayList(); 50 | if(CollectionUtils.isNotEmpty(dbList)){ 51 | dbList.forEach(source->{ 52 | ${dtoClass} target = new ${dtoClass}(); 53 | BeanUtils.copyProperties(source, target); 54 | resultList.add(target); 55 | }); 56 | } 57 | return new PageUtils<>(resultList, count, request); 58 | } 59 | 60 | /** 61 | * 获取数据集(下拉框) 62 | * @param request 63 | */ 64 | public List<${dtoClass}> selectAll(${requestSearchClass} request){ 65 | List<${dtoClass}> resultList = Lists.newArrayList(); 66 | List<${entityClass}> dbList = super.baseMapper.selectPage(request); 67 | if(CollectionUtils.isNotEmpty(dbList)){ 68 | dbList.forEach(source->{ 69 | ${dtoClass} result = new ${dtoClass}(); 70 | BeanUtils.copyProperties(source, result); 71 | resultList.add(result); 72 | }); 73 | } 74 | return resultList; 75 | } 76 | 77 | /** 78 | * 获取详情 79 | * @param request 80 | */ 81 | public ${dtoClass} getDetail(IdRequest request){ 82 | ${entityClass} entity = baseMapper.selectByPrimaryKey(request.getId()); 83 | if(Objects.nonNull(entity)){ 84 | ${dtoClass} result = new ${dtoClass}(); 85 | BeanUtils.copyProperties(entity, result); 86 | return result; 87 | } 88 | return null; 89 | } 90 | 91 | 92 | 93 | /** 94 | * 新增操作 95 | * @param request 96 | */ 97 | @Transactional(rollbackFor = Exception.class) 98 | <#if isRequestAddOrUpdateEnable> 99 | public void add(${requestAddClass} request){ 100 | <#else> 101 | public void add(${requestClass} request){ 102 | #if> 103 | ${entityClass} entity = new ${entityClass}(); 104 | BeanUtils.copyProperties(request, entity); 105 | entity.setId(IdGenerator.getId(${entityClass}.class.getName())); 106 | baseMapper.insertPrimaryKeySelective(entity); 107 | } 108 | 109 | /** 110 | * 编辑操作 111 | * @param request 112 | */ 113 | @Transactional(rollbackFor = Exception.class) 114 | <#if isRequestAddOrUpdateEnable> 115 | public void update(${requestUpdateClass} request){ 116 | <#else> 117 | public void update(${requestClass} request){ 118 | #if> 119 | ${entityClass} entity = new ${entityClass}(); 120 | BeanUtils.copyProperties(request, entity); 121 | baseMapper.updatePrimaryKeySelective(entity); 122 | } 123 | 124 | /** 125 | * 删除操作 126 | * @param request 127 | */ 128 | @Transactional(rollbackFor = Exception.class) 129 | public void delete(IdRequest request){ 130 | baseMapper.deleteByPrimaryKey(request.getId()); 131 | } 132 | 133 | } 134 | -------------------------------------------------------------------------------- /src/main/resources/templates/web.java.ftl: -------------------------------------------------------------------------------- 1 | package ${package.provider}; 2 | 3 | import com.alibaba.dubbo.config.annotation.Service; 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import com.yijiupi.basic.acpect.DubboConfiguration; 6 | import com.yijiupi.basic.request.BaseResponse; 7 | import com.yijiupi.basic.request.IdRequest; 8 | import com.yijiupi.basic.utils.PageUtils; 9 | import java.util.List; 10 | import io.swagger.annotations.Api; 11 | import io.swagger.annotations.ApiOperation; 12 | 13 | import ${package.api}.${apiClass}; 14 | import ${package.service}.${serviceClass}; 15 | import ${package.request}.${requestSearchClass}; 16 | <#if isRequestAddOrUpdateEnable> 17 | import ${package.request}.${requestAddClass}; 18 | import ${package.request}.${requestUpdateClass}; 19 | <#else> 20 | import ${package.request}.${requestClass}; 21 | #if> 22 | import ${package.dto}.${dtoClass}; 23 | 24 | /** 25 | *26 | * ${entityClass} Api实现层 27 | *
28 | * 29 | * @author ${author} 30 | * @since ${date} 31 | */ 32 | @DubboConfiguration 33 | @Service 34 | @Api(value = "${tableComment}") 35 | public class ${providerClass} implements ${apiClass} { 36 | 37 | @Autowired 38 | private ${serviceClass} ${serviceClass?uncap_first}; 39 | 40 | @Override 41 | @ApiOperation(value = "查询分页" , notes="权限编码:${projectModuleCode}:${apiClass}:selectPage") 42 | public BaseResponse