整理 vm 模板

提交 test 生成的示例
pull/2/head
YunaiV 2021-02-06 23:52:26 +08:00
parent 2210ed5cf8
commit 5442f6522e
25 changed files with 412 additions and 246 deletions

View File

@ -5,6 +5,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@ -30,13 +31,12 @@ import com.ruoyi.generator.service.IGenTableService;
/**
*
*
*
* @author ruoyi
*/
@RestController
@RequestMapping("/tool/gen")
public class GenController extends BaseController
{
public class GenController extends BaseController {
@Autowired
private IGenTableService genTableService;
@ -48,8 +48,7 @@ public class GenController extends BaseController
*/
@PreAuthorize("@ss.hasPermi('tool:gen:list')")
@GetMapping("/list")
public TableDataInfo genList(GenTable genTable)
{
public TableDataInfo genList(GenTable genTable) {
startPage();
List<GenTable> list = genTableService.selectGenTableList(genTable);
return getDataTable(list);
@ -60,8 +59,7 @@ public class GenController extends BaseController
*/
@PreAuthorize("@ss.hasPermi('tool:gen:query')")
@GetMapping(value = "/{talbleId}")
public AjaxResult getInfo(@PathVariable Long talbleId)
{
public AjaxResult getInfo(@PathVariable Long talbleId) {
GenTable table = genTableService.selectGenTableById(talbleId);
List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(talbleId);
Map<String, Object> map = new HashMap<String, Object>();
@ -75,8 +73,7 @@ public class GenController extends BaseController
*/
@PreAuthorize("@ss.hasPermi('tool:gen:list')")
@GetMapping("/db/list")
public TableDataInfo dataList(GenTable genTable)
{
public TableDataInfo dataList(GenTable genTable) {
startPage();
List<GenTable> list = genTableService.selectDbTableList(genTable);
return getDataTable(list);
@ -87,8 +84,7 @@ public class GenController extends BaseController
*/
@PreAuthorize("@ss.hasPermi('tool:gen:list')")
@GetMapping(value = "/column/{talbleId}")
public TableDataInfo columnList(Long tableId)
{
public TableDataInfo columnList(Long tableId) {
TableDataInfo dataInfo = new TableDataInfo();
List<GenTableColumn> list = genTableColumnService.selectGenTableColumnListByTableId(tableId);
dataInfo.setRows(list);
@ -102,8 +98,7 @@ public class GenController extends BaseController
@PreAuthorize("@ss.hasPermi('tool:gen:list')")
@Log(title = "代码生成", businessType = BusinessType.IMPORT)
@PostMapping("/importTable")
public AjaxResult importTableSave(String tables)
{
public AjaxResult importTableSave(String tables) {
String[] tableNames = Convert.toStrArray(tables);
// 查询表信息
List<GenTable> tableList = genTableService.selectDbTableListByNames(tableNames);
@ -117,8 +112,7 @@ public class GenController extends BaseController
@PreAuthorize("@ss.hasPermi('tool:gen:edit')")
@Log(title = "代码生成", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult editSave(@Validated @RequestBody GenTable genTable)
{
public AjaxResult editSave(@Validated @RequestBody GenTable genTable) {
genTableService.validateEdit(genTable);
genTableService.updateGenTable(genTable);
return AjaxResult.success();
@ -130,8 +124,7 @@ public class GenController extends BaseController
@PreAuthorize("@ss.hasPermi('tool:gen:remove')")
@Log(title = "代码生成", businessType = BusinessType.DELETE)
@DeleteMapping("/{tableIds}")
public AjaxResult remove(@PathVariable Long[] tableIds)
{
public AjaxResult remove(@PathVariable Long[] tableIds) {
genTableService.deleteGenTableByIds(tableIds);
return AjaxResult.success();
}
@ -141,8 +134,7 @@ public class GenController extends BaseController
*/
@PreAuthorize("@ss.hasPermi('tool:gen:preview')")
@GetMapping("/preview/{tableId}")
public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException
{
public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException {
Map<String, String> dataMap = genTableService.previewCode(tableId);
return AjaxResult.success(dataMap);
}
@ -153,8 +145,7 @@ public class GenController extends BaseController
@PreAuthorize("@ss.hasPermi('tool:gen:code')")
@Log(title = "代码生成", businessType = BusinessType.GENCODE)
@GetMapping("/download/{tableName}")
public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException
{
public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException {
byte[] data = genTableService.downloadCode(tableName);
genCode(response, data);
}
@ -165,8 +156,7 @@ public class GenController extends BaseController
@PreAuthorize("@ss.hasPermi('tool:gen:code')")
@Log(title = "代码生成", businessType = BusinessType.GENCODE)
@GetMapping("/genCode/{tableName}")
public AjaxResult genCode(@PathVariable("tableName") String tableName)
{
public AjaxResult genCode(@PathVariable("tableName") String tableName) {
genTableService.generatorCode(tableName);
return AjaxResult.success();
}
@ -177,8 +167,7 @@ public class GenController extends BaseController
@PreAuthorize("@ss.hasPermi('tool:gen:edit')")
@Log(title = "代码生成", businessType = BusinessType.UPDATE)
@GetMapping("/synchDb/{tableName}")
public AjaxResult synchDb(@PathVariable("tableName") String tableName)
{
public AjaxResult synchDb(@PathVariable("tableName") String tableName) {
genTableService.synchDb(tableName);
return AjaxResult.success();
}
@ -189,8 +178,7 @@ public class GenController extends BaseController
@PreAuthorize("@ss.hasPermi('tool:gen:code')")
@Log(title = "代码生成", businessType = BusinessType.GENCODE)
@GetMapping("/batchGenCode")
public void batchGenCode(HttpServletResponse response, String tables) throws IOException
{
public void batchGenCode(HttpServletResponse response, String tables) throws IOException {
String[] tableNames = Convert.toStrArray(tables);
byte[] data = genTableService.downloadCode(tableNames);
genCode(response, data);
@ -199,8 +187,7 @@ public class GenController extends BaseController
/**
* zip
*/
private void genCode(HttpServletResponse response, byte[] data) throws IOException
{
private void genCode(HttpServletResponse response, byte[] data) throws IOException {
response.reset();
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
@ -209,4 +196,4 @@ public class GenController extends BaseController
response.setContentType("application/octet-stream; charset=UTF-8");
IOUtils.write(data, response.getOutputStream());
}
}
}

View File

@ -22,11 +22,6 @@ public class GenTable extends BaseEntity {
@NotBlank(message = "生成包路径不能为空")
private String packageName;
/**
*
*/
private GenTableColumn pkColumn;
/**
*
*/
@ -57,31 +52,4 @@ public class GenTable extends BaseEntity {
*/
private String parentMenuName;
public boolean isTree() {
return isTree(this.tplCategory);
}
public static boolean isTree(String tplCategory) {
return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory);
}
public boolean isCrud() {
return isCrud(this.tplCategory);
}
public static boolean isCrud(String tplCategory) {
return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory);
}
public boolean isSuperColumn(String javaField) {
return isSuperColumn(this.tplCategory, javaField);
}
public static boolean isSuperColumn(String tplCategory, String javaField) {
if (isTree(tplCategory)) {
return StringUtils.equalsAnyIgnoreCase(javaField,
ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY));
}
return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY);
}
}

View File

@ -1,61 +0,0 @@
package ${packageName}.service;
import java.util.List;
import ${packageName}.domain.${ClassName};
/**
* ${functionName}Service接口
*
* @author ${author}
* @date ${datetime}
*/
public interface I${ClassName}Service
{
/**
* 查询${functionName}
*
* @param ${pkColumn.javaField} ${functionName}ID
* @return ${functionName}
*/
public ${ClassName} select${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField});
/**
* 查询${functionName}列表
*
* @param ${className} ${functionName}
* @return ${functionName}集合
*/
public List<${ClassName}> select${ClassName}List(${ClassName} ${className});
/**
* 新增${functionName}
*
* @param ${className} ${functionName}
* @return 结果
*/
public int insert${ClassName}(${ClassName} ${className});
/**
* 修改${functionName}
*
* @param ${className} ${functionName}
* @return 结果
*/
public int update${ClassName}(${ClassName} ${className});
/**
* 批量删除${functionName}
*
* @param ${pkColumn.javaField}s 需要删除的${functionName}ID
* @return 结果
*/
public int delete${ClassName}ByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s);
/**
* 删除${functionName}信息
*
* @param ${pkColumn.javaField} ${functionName}ID
* @return 结果
*/
public int delete${ClassName}ById(${pkColumn.javaType} ${pkColumn.javaField});
}

View File

@ -1,95 +0,0 @@
<?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="${packageName}.mapper.${ClassName}Mapper">
<resultMap type="${ClassName}" id="${ClassName}Result">
#foreach ($column in $columns)
<result property="${column.javaField}" column="${column.columnName}" />
#end
</resultMap>
<sql id="select${ClassName}Vo">
select#foreach($column in $columns) $column.columnName#if($velocityCount != $columns.size()),#end#end from ${tableName}
</sql>
<select id="select${ClassName}List" parameterType="${ClassName}" resultMap="${ClassName}Result">
<include refid="select${ClassName}Vo"/>
<where>
#foreach($column in $columns)
#set($queryType=$column.queryType)
#set($javaField=$column.javaField)
#set($javaType=$column.javaType)
#set($columnName=$column.columnName)
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
#if($column.query)
#if($column.queryType == "EQ")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName = #{$javaField}</if>
#elseif($queryType == "NE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName != #{$javaField}</if>
#elseif($queryType == "GT")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt; #{$javaField}</if>
#elseif($queryType == "GTE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &gt;= #{$javaField}</if>
#elseif($queryType == "LT")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt; #{$javaField}</if>
#elseif($queryType == "LTE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName &lt;= #{$javaField}</if>
#elseif($queryType == "LIKE")
<if test="$javaField != null #if($javaType == 'String' ) and $javaField.trim() != ''#end"> and $columnName like concat('%', #{$javaField}, '%')</if>
#elseif($queryType == "BETWEEN")
<if test="params.begin$AttrName != null and params.begin$AttrName != '' and params.end$AttrName != null and params.end$AttrName != ''"> and $columnName between #{params.begin$AttrName} and #{params.end$AttrName}</if>
#end
#end
#end
</where>
</select>
<select id="select${ClassName}ById" parameterType="${pkColumn.javaType}" resultMap="${ClassName}Result">
<include refid="select${ClassName}Vo"/>
where ${pkColumn.columnName} = #{${pkColumn.javaField}}
</select>
<insert id="insert${ClassName}" parameterType="${ClassName}"#if($pkColumn.increment) useGeneratedKeys="true" keyProperty="$pkColumn.javaField"#end>
insert into ${tableName}
<trim prefix="(" suffix=")" suffixOverrides=",">
#foreach($column in $columns)
#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
<if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName,</if>
#end
#end
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#foreach($column in $columns)
#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment)
<if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">#{$column.javaField},</if>
#end
#end
</trim>
</insert>
<update id="update${ClassName}" parameterType="${ClassName}">
update ${tableName}
<trim prefix="SET" suffixOverrides=",">
#foreach($column in $columns)
#if($column.columnName != $pkColumn.columnName)
<if test="$column.javaField != null#if($column.javaType == 'String' && $column.required) and $column.javaField != ''#end">$column.columnName = #{$column.javaField},</if>
#end
#end
</trim>
where ${pkColumn.columnName} = #{${pkColumn.javaField}}
</update>
<delete id="delete${ClassName}ById" parameterType="${pkColumn.javaType}">
delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}}
</delete>
<delete id="delete${ClassName}ByIds" parameterType="String">
delete from ${tableName} where ${pkColumn.columnName} in
<foreach item="${pkColumn.javaField}" collection="array" open="(" separator="," close=")">
#{${pkColumn.javaField}}
</foreach>
</delete>
</mapper>

View File

@ -1 +0,0 @@
package cn.iocoder.dashboard.modules.infra.convert;

View File

@ -0,0 +1 @@
package cn.iocoder.dashboard.modules.system.controller.test;

View File

@ -0,0 +1,30 @@
package cn.iocoder.dashboard.modules.system.controller.test.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* Base VO VO 使
* VO Swagger
*/
@Data
public class SysTestDemoBaseVO {
@ApiModelProperty(value = "字典名称", required = true, example = "性别额")
@NotNull(message = "字典名称不能为空")
private String name;
@ApiModelProperty(value = "字典类型", required = true, example = "sys_sex")
@NotNull(message = "字典类型不能为空")
private String dictType;
@ApiModelProperty(value = "状态", required = true, example = "1")
@NotNull(message = "状态不能为空")
private Integer status;
@ApiModelProperty(value = "备注", example = "我是备注")
private String remark;
}

View File

@ -0,0 +1,14 @@
package cn.iocoder.dashboard.modules.system.controller.test.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@ApiModel("字典类型创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SysTestDemoCreateReqVO extends SysTestDemoBaseVO {
}

View File

@ -0,0 +1,41 @@
package cn.iocoder.dashboard.modules.system.controller.test.vo;
import cn.iocoder.dashboard.common.pojo.PageParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import static cn.iocoder.dashboard.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ApiModel("字典类型分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SysTestDemoPageReqVO extends PageParam {
@ApiModelProperty(value = "字典名称", example = "性别额")
private String name;
@ApiModelProperty(value = "字典类型", example = "sys_sex")
private String dictType;
@ApiModelProperty(value = "状态", example = "1")
private Integer status;
@ApiModelProperty(value = "备注", example = "我是备注")
private String remark;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "开始创建时间")
private Date beginCreateTime;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "结束创建时间")
private Date endCreateTime;
}

View File

@ -0,0 +1,19 @@
package cn.iocoder.dashboard.modules.system.controller.test.vo;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
@ApiModel("字典类型 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SysTestDemoRespVO extends SysTestDemoBaseVO {
@ApiModelProperty(value = "字典主键", required = true, example = "1")
private Long id;
@ApiModelProperty(value = "创建时间", required = true)
private Date createTime;
}

View File

@ -0,0 +1,21 @@
package cn.iocoder.dashboard.modules.system.controller.test.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@ApiModel("字典类型更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SysTestDemoUpdateReqVO extends SysTestDemoBaseVO {
@ApiModelProperty(value = "字典主键", required = true, example = "1")
@NotNull(message = "字典主键不能为空")
private Long id;
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.dashboard.modules.system.dal.mysql.dao.test;
import cn.iocoder.dashboard.common.pojo.PageResult;
import cn.iocoder.dashboard.framework.mybatis.core.query.QueryWrapperX;
import cn.iocoder.dashboard.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.test.SysTestDemoDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.dashboard.modules.system.controller.test.vo.SysTestDemoPageReqVO;
/**
* Mapper
*
* @author
*/
@Mapper
public interface SysTestDemoMapper extends BaseMapperX<SysTestDemoDO> {
default PageResult<SysTestDemoDO> selectPage(SysTestDemoPageReqVO reqVO) {
return selectPage(reqVO, new QueryWrapperX<SysTestDemoDO>()
.likeIfPresent("name", reqVO.getName())
.eqIfPresent("dict_type", reqVO.getDictType())
.eqIfPresent("status", reqVO.getStatus())
.eqIfPresent("remark", reqVO.getRemark())
.betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime())
);
}
}

View File

@ -0,0 +1,44 @@
package cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.test;
import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
/**
* DO
*
* @author
*/
@TableName("sys_test_demo")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysTestDemoDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*/
private String name;
/**
*
*/
private String dictType;
/**
*
*/
private Integer status;
/**
*
*/
private String remark;
}

View File

@ -0,0 +1,66 @@
package cn.iocoder.dashboard.modules.system.service.test;
import cn.iocoder.dashboard.common.pojo.PageResult;
import cn.iocoder.dashboard.modules.system.controller.test.vo.SysTestDemoCreateReqVO;
import cn.iocoder.dashboard.modules.system.controller.test.vo.SysTestDemoPageReqVO;
import cn.iocoder.dashboard.modules.system.controller.test.vo.SysTestDemoUpdateReqVO;
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.test.SysTestDemoDO;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
/**
* Service
*
* @author
*/
public interface SysTestDemoService {
/**
*
*
* @param createReqVO
* @return
*/
Long createTestDemo(@Valid SysTestDemoCreateReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateTestDemo(@Valid SysTestDemoUpdateReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteTestDemo(Long id);
/**
*
*
* @param id
* @return
*/
SysTestDemoDO getTestDemo(Long id);
/**
*
*
* @param ids
* @return
*/
List<SysTestDemoDO> getTestDemoList(Collection<Long> ids);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<SysTestDemoDO> getTestDemoPage(SysTestDemoPageReqVO pageReqVO);
}

View File

@ -17,6 +17,8 @@ import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.*;
import static cn.hutool.core.text.CharSequenceUtil.*;
/**
* Builder
* 1. {@link ToolInformationSchemaTableDO} {@link ToolCodegenTableDO}
@ -25,6 +27,18 @@ import java.util.*;
@Component
public class ToolCodegenBuilder {
/**
* Module TODO
*
* key
* value
*/
private static final Map<String, String> moduleNames = MapUtil.<String, String>builder()
.put("system", "sys")
.put("infra", "inf")
.put("tool", "tool")
.build();
/**
* {@link ToolCodegenColumnListConditionEnum}
*
@ -93,9 +107,9 @@ public class ToolCodegenBuilder {
CREATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
UPDATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
LIST_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
LIST_OPERATION_EXCLUDE_COLUMN.remove("create_time"); // 创建时间,还是可能需要传递的
LIST_OPERATION_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是可能需要传递的
LIST_OPERATION_RESULT_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS);
LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("create_time"); // 创建时间,还是需要返回的
LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是需要返回的
}
public ToolCodegenTableDO buildTable(ToolInformationSchemaTableDO schemaTable) {
@ -110,13 +124,12 @@ public class ToolCodegenBuilder {
* @param table
*/
private void initTableDefault(ToolCodegenTableDO table) {
table.setModuleName(StrUtil.subBefore(table.getTableName(),
'_', false)); // 第一个 _ 前缀的前面,作为 module 名字
table.setBusinessName(StrUtil.subAfter(table.getTableName(),
'_', false)); // 第一个 _ 前缀的后面,作为 module 名字
table.setBusinessName(StrUtil.toCamelCase(table.getBusinessName())); // 可能存在多个 _ 的情况,转换成驼峰
table.setClassName(StrUtil.upperFirst(StrUtil.toCamelCase(table.getTableName()))); // 驼峰 + 首字母大写
table.setClassComment(StrUtil.subBefore(table.getTableComment(), // 去除结尾的表,作为类描述
table.setModuleName(getFullModuleName(StrUtil.subBefore(table.getTableName(),
'_', false))); // 第一个 _ 前缀的前面,作为 module 名字
table.setBusinessName(toCamelCase(subAfter(table.getTableName(),
'_', false))); // 第一步,第一个 _ 前缀的后面,作为 module 名字; 第二步,可能存在多个 _ 的情况,转换成驼峰
table.setClassName(upperFirst(toCamelCase(table.getTableName()))); // 驼峰 + 首字母大写
table.setClassComment(subBefore(table.getTableComment(), // 去除结尾的表,作为类描述
'表', true));
table.setAuthor("芋艿"); // TODO 稍后改成创建人
table.setTemplateType(ToolCodegenTemplateTypeEnum.CRUD.getType());
@ -144,7 +157,7 @@ public class ToolCodegenBuilder {
private void processColumnJava(ToolCodegenColumnDO column) {
// 处理 javaField 字段
column.setJavaField(StrUtil.toCamelCase(column.getColumnName()));
column.setJavaField(toCamelCase(column.getColumnName()));
// 处理 dictType 字段,暂无
// 处理 javaType 字段
String dbType = StrUtil.subBefore(column.getColumnType(), '(', false);
@ -194,4 +207,27 @@ public class ToolCodegenBuilder {
}
}
/**
*
*
* @param fullModuleName
* @return
*/
public String getSimpleModuleName(String fullModuleName) {
return moduleNames.getOrDefault(fullModuleName, fullModuleName);
}
/**
*
*
* @param shortModuleName
* @return
*/
public String getFullModuleName(String shortModuleName) {
return moduleNames.entrySet().stream()
.filter(entry -> entry.getValue().equals(shortModuleName)) // 匹配
.findFirst().map(Map.Entry::getKey) // 返回 key
.orElse(shortModuleName); // 兜底返回 shortModuleName
}
}

View File

@ -14,6 +14,7 @@ import cn.iocoder.dashboard.util.collection.CollectionUtils;
import cn.iocoder.dashboard.util.date.DateUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -31,6 +32,9 @@ import static cn.hutool.core.text.CharSequenceUtil.*;
@Component
public class ToolCodegenEngine {
@Resource
private ToolCodegenBuilder codegenBuilder;
/**
* hutool
*/
@ -69,9 +73,15 @@ public class ToolCodegenEngine {
Map<String, Object> bindingMap = new HashMap<>(globalBindingMap);
bindingMap.put("table", table);
bindingMap.put("columns", columns);
bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, ToolCodegenColumnDO::getPrimaryKey));
bindingMap.put("simpleClassName", upperFirst(toCamelCase(subAfter( // 去掉第一个驼峰,例如说 SysUser 去掉后是 User
toUnderlineCase(table.getClassName()), '_', false))));
bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, ToolCodegenColumnDO::getPrimaryKey)); // 主键字段
String simpleModuleName = codegenBuilder.getSimpleModuleName(table.getModuleName());
bindingMap.put("simpleModuleName", simpleModuleName); // 将 system 转成 sys
// className 相关
String simpleClassName = subAfter(table.getClassName(), upperFirst(simpleModuleName)
, false); // 将 TestDictType 转换成 DictType. 因为在 create 等方法后,不需要带上 Test 前缀
bindingMap.put("simpleClassName", simpleClassName);
bindingMap.put("simpleClassName_underlineCase", toUnderlineCase(simpleClassName)); // 将 DictType 转换成 dict_type
bindingMap.put("classNameVar", lowerFirst(simpleClassName)); // 将 DictType 转换成 dictType用于变量
// 执行生成
// String result = templateEngine.getTemplate("codegen/dal/do.vm").render(bindingMap);
// String result = templateEngine.getTemplate("codegen/dal/mapper.vm").render(bindingMap);
@ -80,7 +90,10 @@ public class ToolCodegenEngine {
// String result = templateEngine.getTemplate("codegen/controller/vo/createReqVO.vm").render(bindingMap);
// String result = templateEngine.getTemplate("codegen/controller/vo/updateReqVO.vm").render(bindingMap);
// String result = templateEngine.getTemplate("codegen/controller/vo/respVO.vm").render(bindingMap);
// String result = templateEngine.getTemplate("codegen/convert/convert.vm").render(bindingMap);
// String result = templateEngine.getTemplate("codegen/enums/errorcode.vm").render(bindingMap);
String result = templateEngine.getTemplate("codegen/service/service.vm").render(bindingMap);
// String result = templateEngine.getTemplate("codegen/service/serviceImpl.vm").render(bindingMap);
System.out.println(result);
}

View File

@ -6,8 +6,8 @@ import io.swagger.annotations.*;
import javax.validation.constraints.*;
## 处理 Date 字段的引入
#foreach ($column in $columns)
#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}))
&& ${column.javaType} == "Date")## 时间类型
#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult})
&& ${column.javaType} == "Date"))## 时间类型
import org.springframework.format.annotation.DateTimeFormat;
import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

View File

@ -0,0 +1,22 @@
package ${basePackage}.${table.moduleName}.convert.${table.businessName};
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import ${basePackage}.${table.moduleName}.controller.${table.businessName}.vo.*;
import ${basePackage}.${table.moduleName}.dal.mysql.dataobject.${table.businessName}.${table.className}DO;
/**
* ${table.classComment} Convert
*
* @author ${table.author}
*/
@Mapper
public interface ${table.className}Convert {
${table.className}Convert INSTANCE = Mappers.getMapper(${table.className}Convert.class);
${table.className}DO convert(${table.className}CreateReqVO bean);
${table.className}DO convert(${table.className}UpdateReqVO bean);
}

View File

@ -3,7 +3,7 @@ package ${basePackage}.${table.moduleName}.dal.mysql.dataobject.${table.business
import lombok.*;
import java.util.*;
import com.baomidou.mybatisplus.annotation.*;
import ${BaseDOClassName};
import ${baseDOClassName};
/**
* ${table.classComment} DO

View File

@ -5,6 +5,7 @@ import ${QueryWrapperClassName};
import ${BaseMapperClassName};
import ${basePackage}.${table.moduleName}.dal.mysql.dataobject.${table.businessName}.${table.className}DO;
import org.apache.ibatis.annotations.Mapper;
import ${basePackage}.${table.moduleName}.controller.${table.businessName}.vo.${table.className}PageReqVO;
/**
* ${table.classComment} Mapper
@ -26,19 +27,19 @@ public interface ${table.className}Mapper extends BaseMapperX<${table.className}
.neIfPresent("${column.columnName}", reqVO.get${JavaField}())
#end
#if (${column.listOperationCondition} == ">")##情况三,> 的时候
.gtIfPresent("${column.columnName}", reqVO.get${JavaField}())
.gtIfPresent("${column.columnName}", reqVO.get${JavaField}())
#end
#if (${column.listOperationCondition} == ">=")##情况四,>= 的时候
.geIfPresent("${column.columnName}", reqVO.get${JavaField}())
.geIfPresent("${column.columnName}", reqVO.get${JavaField}())
#end
#if (${column.listOperationCondition} == "<")##情况五,< 的时候
.gtIfPresent("${column.columnName}", reqVO.get${JavaField}())
.gtIfPresent("${column.columnName}", reqVO.get${JavaField}())
#end
#if (${column.listOperationCondition} == "LIKE")##情况七Like 的时候
.likeIfPresent("${column.columnName}", reqVO.get${JavaField}())
.likeIfPresent("${column.columnName}", reqVO.get${JavaField}())
#end
#if (${column.listOperationCondition} == "BETWEEN")##情况八Between 的时候
.betweenIfPresent("${column.columnName}", reqVO.getBegin${JavaField}(), reqVO.getEnd${JavaField}())
.betweenIfPresent("${column.columnName}", reqVO.getBegin${JavaField}(), reqVO.getEnd${JavaField}())
#end
#end
#end

View File

@ -0,0 +1,2 @@
// ========== ${table.classCommet} TODO 补充编号 ==========
ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_FOUND = new ErrorCode(TODO 补充编号, "${table.classComment}不存在}");

View File

@ -17,7 +17,7 @@ public interface ${table.className}Service {
* 创建${table.classComment}
*
* @param createReqVO 创建信息
* @return ${class.description}
* @return 编号
*/
${primaryColumn.javaType} create${simpleClassName}(@Valid ${table.className}CreateReqVO createReqVO);
@ -39,7 +39,7 @@ public interface ${table.className}Service {
* 获得${table.classComment}
*
* @param id 编号
* @return ${class.description}
* @return ${table.classComment}
*/
${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id);
@ -47,7 +47,7 @@ public interface ${table.className}Service {
* 获得${table.classComment}列表
*
* @param ids 编号
* @return ${class.classComment}列表
* @return ${table.classComment}列表
*/
List<${table.className}DO> get${simpleClassName}List(Collection<${primaryColumn.javaType}> ids);
@ -55,7 +55,7 @@ public interface ${table.className}Service {
* 获得${table.classComment}分页
*
* @param pageReqVO 分页查询
* @return ${class.classComment}分页
* @return ${table.classComment}分页
*/
PageResult<${table.className}DO> get${simpleClassName}Page(${table.className}PageReqVO pageReqVO);

View File

@ -0,0 +1,30 @@
package ${basePackage}.${table.moduleName}.service.${table.businessName}.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import ${basePackage}.${table.moduleName}.controller.${table.businessName}.vo.*;
import ${basePackage}.${table.moduleName}.dal.mysql.dataobject.${table.businessName}.${table.className}DO;
import ${PageResultClassName};
import static ${basePackage}.${table.moduleName}.enums.${simpleModuleName.substring(0,1).toUpperCase()}${simpleModuleName.substring(1)}ErrorCodeConstants.*;
/**
* ${table.classComment} Service 实现类
*
* @author ${table.author}
*/
@Validated
public class ${table.className}ServiceImpl implements {table.className}Service {
@Resource
private ${table.className}Mapper ${classNameVar}Mapper;
@Override
public ${primaryColumn.javaType} create${simpleClassName}(@Valid ${table.className}CreateReqVO createReqVO) {
}
}

View File

@ -24,7 +24,7 @@ public class ToolCodegenEngineTest {
@Test
public void testExecute() {
ToolCodegenTableDO table = codegenTableMapper.selectById(8);
ToolCodegenTableDO table = codegenTableMapper.selectById(10);
List<ToolCodegenColumnDO> columns = codegenColumnMapper.selectByTableId(table.getId());
codegenEngine.execute(table, columns);
}

View File

@ -16,7 +16,7 @@ class ToolCodegenServiceImplTest {
@Test
public void tetCreateCodegenTable() {
toolCodegenService.createCodegenTable("sys_dict_type");
toolCodegenService.createCodegenTable("sys_test_demo");
}
}