完成主子表“代码生成”模块重构,支持mybatis-flex
This commit is contained in:
parent
21c040b74e
commit
968e26c593
1
pom.xml
1
pom.xml
@ -28,7 +28,6 @@
|
||||
<pagehelper.version>5.3.3</pagehelper.version>
|
||||
<fastjson.version>2.0.41</fastjson.version>
|
||||
<oshi.version>6.4.6</oshi.version>
|
||||
<!-- <commons.io.version>2.13.0</commons.io.version>-->
|
||||
<commons.collections.version>3.2.2</commons.collections.version>
|
||||
<poi.version>5.2.3</poi.version>
|
||||
<easyexcel.version>3.3.2</easyexcel.version>
|
||||
|
@ -116,8 +116,10 @@ public class VelocityUtils
|
||||
context.put("subTableName", subTableName);
|
||||
context.put("subTableFkName", subTableFkName);
|
||||
context.put("subTableFkClassName", subTableFkClassName);
|
||||
context.put("CapitalUnderScoreSubTableFkClassName", StringUtils.upperCase(StringUtils.toUnderScoreCase(subTableFkClassName)));//带下划线的字段大写
|
||||
context.put("subTableFkclassName", StringUtils.uncapitalize(subTableFkClassName));
|
||||
context.put("subClassName", subClassName);
|
||||
context.put("CapitalUnderScoreSubClassName", StringUtils.upperCase(StringUtils.toUnderScoreCase(subClassName)));//大写的子类类名下划线:SYS_USER
|
||||
context.put("subclassName", StringUtils.uncapitalize(subClassName));
|
||||
context.put("subImportList", getImportList(genTable.getSubTable()));
|
||||
}
|
||||
@ -152,6 +154,8 @@ public class VelocityUtils
|
||||
{
|
||||
templates.add("vm/vue/index.vue.vm");
|
||||
templates.add("vm/java/sub-domain.java.vm");
|
||||
templates.add("vm/java/sub-mapper.java.vm");
|
||||
templates.add("vm/xml/sub-mapper.xml.vm");
|
||||
}
|
||||
return templates;
|
||||
}
|
||||
@ -176,56 +180,26 @@ public class VelocityUtils
|
||||
String mybatisPath = MYBATIS_PATH + "/" + moduleName;
|
||||
String vuePath = "vue";
|
||||
|
||||
if (template.contains("domain.java.vm"))
|
||||
switch (template)
|
||||
{
|
||||
fileName = StringUtils.format("{}/domain/{}.java", javaPath, className);
|
||||
}
|
||||
else if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory()))
|
||||
{
|
||||
fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName());
|
||||
}
|
||||
else if (template.contains("vo.java.vm")) {
|
||||
fileName = StringUtils.format("{}/domain/vo/{}Vo.java", javaPath, className);
|
||||
}
|
||||
else if (template.contains("bo.java.vm")) {
|
||||
fileName = StringUtils.format("{}/domain/bo/{}Bo.java", javaPath, className);
|
||||
}
|
||||
else if (template.contains("mapper.java.vm"))
|
||||
{
|
||||
fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className);
|
||||
}
|
||||
else if (template.contains("service.java.vm"))
|
||||
{
|
||||
fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className);
|
||||
}
|
||||
else if (template.contains("serviceImpl.java.vm"))
|
||||
{
|
||||
fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className);
|
||||
}
|
||||
else if (template.contains("controller.java.vm"))
|
||||
{
|
||||
fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className);
|
||||
}
|
||||
else if (template.contains("mapper.xml.vm"))
|
||||
{
|
||||
fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className);
|
||||
}
|
||||
else if (template.contains("sql.vm"))
|
||||
{
|
||||
fileName = businessName + "Menu.sql";
|
||||
}
|
||||
else if (template.contains("api.js.vm"))
|
||||
{
|
||||
fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName);
|
||||
}
|
||||
else if (template.contains("index.vue.vm"))
|
||||
{
|
||||
fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName);
|
||||
}
|
||||
else if (template.contains("index-tree.vue.vm"))
|
||||
{
|
||||
fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName);
|
||||
case "vm/java/domain.java.vm" -> fileName = StringUtils.format("{}/domain/{}.java", javaPath, className);
|
||||
case "vm/java/sub-domain.java.vm" -> fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName());
|
||||
case "vm/java/vo.java.vm" -> fileName = StringUtils.format("{}/domain/vo/{}Vo.java", javaPath, className);
|
||||
case "vm/java/bo.java.vm" -> fileName = StringUtils.format("{}/domain/bo/{}Bo.java", javaPath, className);
|
||||
case "vm/java/mapper.java.vm" -> fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className);
|
||||
case "vm/java/sub-mapper.java.vm" -> fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, genTable.getSubTable().getClassName());
|
||||
case "vm/java/service.java.vm" -> fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className);
|
||||
case "vm/java/serviceImpl.java.vm" -> fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className);
|
||||
case "vm/java/controller.java.vm" -> fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className);
|
||||
case "vm/xml/mapper.xml.vm" -> fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className);
|
||||
case "vm/xml/sub-mapper.xml.vm" -> fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, genTable.getSubTable().getClassName());
|
||||
case "vm/sql/sql.vm" -> fileName = businessName + "Menu.sql";
|
||||
case "vm/js/api.js.vm" -> fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName);
|
||||
case "vm/vue/index.vue.vm" -> fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName);
|
||||
case "vm/vue/index-tree.vue.vm" -> fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName);
|
||||
default -> fileName = "default.xml";
|
||||
}
|
||||
|
||||
return fileName;
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,9 @@ package ${packageName}.domain;
|
||||
#foreach ($import in $importList)
|
||||
import ${import};
|
||||
#end
|
||||
#if($table.sub)
|
||||
import ${packageName}.domain.${subClassName};
|
||||
#end
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import lombok.Data;
|
||||
@ -46,8 +49,8 @@ public class ${ClassName} extends ${Entity}
|
||||
#end
|
||||
#end
|
||||
#if($table.sub)
|
||||
/** $table.subTable.functionName信息 */
|
||||
private List<${subClassName}> ${subclassName}List;
|
||||
|
||||
/** $table.subTable.functionName信息 */
|
||||
private List<${subClassName}> ${subclassName}List;
|
||||
#end
|
||||
|
||||
}
|
||||
|
@ -22,14 +22,16 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
#if($table.sub)
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import ${packageName}.domain.${subClassName};
|
||||
import ${packageName}.mapper.${subClassName}Mapper;
|
||||
import static ${packageName}.domain.table.${subClassName}TableDef.${CapitalUnderScoreSubClassName};
|
||||
#end
|
||||
import ${packageName}.mapper.${ClassName}Mapper;
|
||||
import ${packageName}.domain.${ClassName};
|
||||
import ${packageName}.domain.bo.${ClassName}Bo;
|
||||
import ${packageName}.domain.vo.${ClassName}Vo;
|
||||
import ${packageName}.service.I${ClassName}Service;
|
||||
|
||||
import static ${packageName}.domain.table.${ClassName}TableDef.${CapitalUnderScoreClassName};
|
||||
|
||||
/**
|
||||
@ -43,6 +45,10 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
|
||||
{
|
||||
@Resource
|
||||
private ${ClassName}Mapper ${className}Mapper;
|
||||
#if($table.sub)
|
||||
@Resource
|
||||
private ${subClassName}Mapper ${subclassName}Mapper;
|
||||
#end
|
||||
|
||||
@Override
|
||||
public QueryWrapper query() {
|
||||
@ -92,7 +98,12 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
|
||||
public ${ClassName}Vo selectById(${pkColumn.javaType} ${pkColumn.javaField})
|
||||
{
|
||||
#set($CapitalPkColumn=${pkColumn.columnName.toUpperCase()})
|
||||
#if($table.sub)
|
||||
return ${className}Mapper.selectOneWithRelationsByQueryAs(query().where(${CapitalUnderScoreClassName}.${CapitalPkColumn}.eq(${pkColumn.javaField})), ${ClassName}Vo.class);
|
||||
#else
|
||||
return this.getOneAs(query().where(${CapitalUnderScoreClassName}.${CapitalPkColumn}.eq(${pkColumn.javaField})), ${ClassName}Vo.class);
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -105,7 +116,11 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
|
||||
public List<${ClassName}Vo> selectList(${ClassName}Bo ${className}Bo)
|
||||
{
|
||||
QueryWrapper queryWrapper = buildQueryWrapper(${className}Bo);
|
||||
#if($table.sub)
|
||||
return ${className}Mapper.selectListWithRelationsByQueryAs(queryWrapper, ${ClassName}Vo.class);
|
||||
#else
|
||||
return this.listAs(queryWrapper, ${ClassName}Vo.class);
|
||||
#end
|
||||
}
|
||||
|
||||
#if($table.crud || $table.sub)
|
||||
@ -119,7 +134,11 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
|
||||
public TableDataInfo<${ClassName}Vo> selectPage(${ClassName}Bo ${className}Bo)
|
||||
{
|
||||
QueryWrapper queryWrapper = buildQueryWrapper(${className}Bo);
|
||||
#if($table.sub)
|
||||
Page<${ClassName}Vo> page = ${className}Mapper.paginateWithRelationsAs(PageQuery.build(), queryWrapper, ${ClassName}Vo.class);
|
||||
#else
|
||||
Page<${ClassName}Vo> page = this.pageAs(PageQuery.build(), queryWrapper, ${ClassName}Vo.class);
|
||||
#end
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
#end
|
||||
@ -140,7 +159,7 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
|
||||
|
||||
#if($table.sub)
|
||||
boolean inserted = this.save(${className});//使用全局配置的雪花算法主键生成器生成ID值
|
||||
if (inserted) {
|
||||
if (inserted && ObjectUtil.isNotNull(${className})) {
|
||||
return insert${subClassName}(${className});
|
||||
}
|
||||
return false;
|
||||
@ -162,15 +181,17 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
|
||||
public boolean update(${ClassName}Bo ${className}Bo)
|
||||
{
|
||||
${ClassName} ${className} = MapstructUtils.convert(${className}Bo, ${ClassName}.class);
|
||||
if(ObjectUtil.isNotNull(${className}) && ObjectUtil.isNotNull(${className}.get${pkColumn.capJavaField}())) {
|
||||
boolean updated = this.updateById(${className});
|
||||
|
||||
#if($table.sub)
|
||||
if (updated) {
|
||||
${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}());
|
||||
QueryWrapper queryWrapper = QueryWrapper.create().from(${CapitalUnderScoreSubClassName}).where(${CapitalUnderScoreSubClassName}.${CapitalUnderScoreSubTableFkClassName}.eq(${className}.get${pkColumn.capJavaField}()));
|
||||
${subclassName}Mapper.deleteByQuery(queryWrapper);
|
||||
return insert${subClassName}(${className});
|
||||
}
|
||||
#end
|
||||
return updated;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -183,9 +204,10 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
|
||||
@Override
|
||||
public boolean deleteByIds(${pkColumn.javaType}[] ${pkColumn.javaField}s)
|
||||
{
|
||||
#if($table.sub)
|
||||
${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s);
|
||||
#end
|
||||
#if($table.sub)
|
||||
QueryWrapper queryWrapper = QueryWrapper.create().from(${CapitalUnderScoreSubClassName}).where(${CapitalUnderScoreSubClassName}.${CapitalUnderScoreSubTableFkClassName}.in(Arrays.asList(${pkColumn.javaField}s)));
|
||||
${subclassName}Mapper.deleteByQuery(queryWrapper);
|
||||
#end
|
||||
return this.removeByIds(Arrays.asList(${pkColumn.javaField}s));
|
||||
}
|
||||
|
||||
@ -195,7 +217,7 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
|
||||
*
|
||||
* @param ${className} ${functionName}对象
|
||||
*/
|
||||
public boolean insert${subClassName}(${ClassName} ${className})
|
||||
private boolean insert${subClassName}(${ClassName} ${className})
|
||||
{
|
||||
List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List();
|
||||
${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}();
|
||||
@ -209,7 +231,7 @@ public class ${ClassName}ServiceImpl extends BaseServiceImpl<${ClassName}Mapper,
|
||||
}
|
||||
if (list.size() > 0)
|
||||
{
|
||||
${className}Mapper.batch${subClassName}(list);
|
||||
return ${subclassName}Mapper.insertBatch(list)>0;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -3,7 +3,17 @@ package ${packageName}.domain;
|
||||
#foreach ($import in $subImportList)
|
||||
import ${import};
|
||||
#end
|
||||
import com.ruoyi.common.core.core.annotation.Excel;
|
||||
import com.mybatisflex.annotation.Id;
|
||||
import com.mybatisflex.annotation.Table;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
#if($table.crud || $table.sub)
|
||||
import com.ruoyi.common.orm.core.domain.BaseEntity;
|
||||
#elseif($table.tree)
|
||||
import com.ruoyi.common.orm.core.domain.TreeEntity;
|
||||
#end
|
||||
|
||||
/**
|
||||
* ${subTable.functionName}对象 ${subTableName}
|
||||
@ -11,63 +21,37 @@ import com.ruoyi.common.core.core.annotation.Excel;
|
||||
* @author ${author}
|
||||
* ${datetime}
|
||||
*/
|
||||
public class ${subClassName} extends BaseEntity
|
||||
#if($table.crud || $table.sub)
|
||||
#set($Entity="BaseEntity")
|
||||
#elseif($table.tree)
|
||||
#set($Entity="TreeEntity")
|
||||
#end
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table(value = "${subTableName}")
|
||||
public class ${subClassName} extends ${Entity}
|
||||
{
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
#foreach ($column in $subTable.columns)
|
||||
#if(!$table.isSuperColumn($column.javaField))
|
||||
#if(!$subTable.isSuperColumn($column.javaField))
|
||||
/** $column.columnComment */
|
||||
#if($column.list)
|
||||
#set($parentheseIndex=$column.columnComment.indexOf("("))
|
||||
#if($parentheseIndex != -1)
|
||||
#set($comment=$column.columnComment.substring(0, $parentheseIndex))
|
||||
#else
|
||||
#set($comment=$column.columnComment)
|
||||
#end
|
||||
#if($parentheseIndex != -1)
|
||||
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
|
||||
#elseif($column.javaType == 'Date')
|
||||
#if($column.javaField=='delFlag')
|
||||
@Column(isLogicDelete = true)
|
||||
#end
|
||||
#if($column.javaField=='version')
|
||||
@Column(version = true)
|
||||
#end
|
||||
#if($column.isPk==1)
|
||||
@Id
|
||||
#end
|
||||
#if($column.javaType == 'Date')
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
@Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd")
|
||||
#else
|
||||
@Excel(name = "${comment}")
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
private $column.javaType $column.javaField;
|
||||
|
||||
#end
|
||||
#end
|
||||
#foreach ($column in $subTable.columns)
|
||||
#if(!$table.isSuperColumn($column.javaField))
|
||||
#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
|
||||
#set($AttrName=$column.javaField)
|
||||
#else
|
||||
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
|
||||
#end
|
||||
public void set${AttrName}($column.javaType $column.javaField)
|
||||
{
|
||||
this.$column.javaField = $column.javaField;
|
||||
}
|
||||
|
||||
public $column.javaType get${AttrName}()
|
||||
{
|
||||
return $column.javaField;
|
||||
}
|
||||
#end
|
||||
#end
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
#foreach ($column in $subTable.columns)
|
||||
#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]"))
|
||||
#set($AttrName=$column.javaField)
|
||||
#else
|
||||
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
|
||||
#end
|
||||
.append("${column.javaField}", get${AttrName}())
|
||||
#end
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,21 @@
|
||||
package ${packageName}.mapper;
|
||||
|
||||
import com.mybatisflex.core.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
#if($table.sub)
|
||||
import ${packageName}.domain.${subClassName};
|
||||
#else
|
||||
import ${packageName}.domain.${ClassName};
|
||||
#end
|
||||
|
||||
/**
|
||||
* ${subTable.functionName}Mapper接口
|
||||
*
|
||||
* @author ${author}
|
||||
* ${datetime}
|
||||
*/
|
||||
@Mapper
|
||||
public interface ${subClassName}Mapper extends BaseMapper<${subClassName}>
|
||||
{
|
||||
|
||||
}
|
@ -11,7 +11,10 @@ import com.ruoyi.common.excel.convert.ExcelDictConvert;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
#if($table.sub)
|
||||
import com.mybatisflex.annotation.RelationOneToMany;
|
||||
import ${packageName}.domain.${subClassName};
|
||||
#end
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
@ -70,4 +73,11 @@ public class ${ClassName}Vo extends ${Entity} implements Serializable
|
||||
#end
|
||||
#end
|
||||
#end
|
||||
|
||||
#if($table.sub)
|
||||
/** $table.subTable.functionName信息 */
|
||||
@RelationOneToMany(selfField = "${pkColumn.javaField}", targetField = "${pkColumn.javaField}")
|
||||
private List<${subClassName}> ${subclassName}List;
|
||||
#end
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,7 @@
|
||||
<?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.${subClassName}Mapper">
|
||||
|
||||
</mapper>
|
@ -130,7 +130,6 @@ public class SysDataScopeServiceImpl implements ISysDataScopeService {
|
||||
}
|
||||
|
||||
queryWrapper.and(bracket(queryCondition));//所有新增的插叙条件外边用圆括号包括起来
|
||||
//System.out.println("*******************:SysDataScopeServiceImpl.filter:queryWrapper.tosql="+queryWrapper.toSQL());
|
||||
|
||||
return queryWrapper;
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ public class SysNoticeServiceImpl extends BaseServiceImpl<SysNoticeMapper, SysNo
|
||||
*/
|
||||
@Override
|
||||
public SysNoticeVo selectNoticeById(Long noticeId) {
|
||||
return this.getOneAs(query().where(SYS_NOTICE.NOTICE_ID.eq(noticeId)), SysNoticeVo.class);
|
||||
return noticeMapper.selectOneWithRelationsByQueryAs(query().where(SYS_NOTICE.NOTICE_ID.eq(noticeId)), SysNoticeVo.class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -206,7 +206,6 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper, SysUser>
|
||||
if (StringUtils.isNotEmpty(userBo.getPhonenumber())) {
|
||||
queryWrapper.and(SYS_USER.PHONENUMBER.like(userBo.getPhonenumber()));
|
||||
}
|
||||
//TODO:数据范围过滤
|
||||
|
||||
Page<SysUserVo> page = this.pageAs(PageQuery.build(), queryWrapper, SysUserVo.class);
|
||||
return TableDataInfo.build(page);
|
||||
|
Loading…
Reference in New Issue
Block a user