feat(generator): 增强代码生成器支持自定义查询和批量操作

- 在Controller模板中新增支持下拉框查询列表接口
- 在Mapper接口模板中新增多种自定义查询和批量插入更新删除方法
- 在Mapper XML模板中添加对应的SQL映射,自定义条件查询及批量操作
- 修改ServiceImpl模板,改用自定义Mapper方法完成查询操作支持分页和列表查询
- 提升代码生成器生成代码的灵活度和扩展性,便于业务定制查询和批量数据处理
main
zangch@mesnac.com 4 weeks ago
parent c6913eb294
commit 8a2c7f257f

@ -112,4 +112,15 @@ public class ${ClassName}Controller extends BaseController {
@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) {
return toAjax(${className}Service.deleteWithValidByIds(List.of(${pkColumn.javaField}s), true));
}
/**
* 下拉框查询${functionName}列表
*/
@SaCheckPermission("${permissionPrefix}:list")
@GetMapping("/get${ClassName}List")
public R<List<${ClassName}Vo>> get${ClassName}List(${ClassName}Bo bo) {
List<${ClassName}Vo> list = ${className}Service.queryList(bo);
return R.ok(list);
}
}

@ -3,6 +3,12 @@ package ${packageName}.mapper;
import ${packageName}.domain.${ClassName};
import ${packageName}.domain.vo.${ClassName}Vo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Collection;
/**
* ${functionName}Mapper接口
@ -12,4 +18,95 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
*/
public interface ${ClassName}Mapper extends BaseMapperPlus<${ClassName}, ${ClassName}Vo> {
/**
* 查询${functionName}列表(自定义条件)
*
* @param queryWrapper 条件
* @return ${functionName}集合
*/
List<${ClassName}Vo> selectCustom${ClassName}VoList(@Param(Constants.WRAPPER) Wrapper<${ClassName}> queryWrapper);
/**
* 根据ID查询${functionName}详情
*
* @param ${pkColumn.javaField} 主键ID
* @return ${functionName}对象
*/
${ClassName}Vo selectCustom${ClassName}VoById(@Param("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField});
/**
* 根据ID列表批量查询${functionName}
*
* @param ids ID集合
* @return ${functionName}集合
*/
List<${ClassName}Vo> selectCustom${ClassName}VoByIds(@Param("ids") Collection<${pkColumn.javaType}> ids);
/**
* 统计${functionName}记录数
*
* @param queryWrapper 查询条件
* @return 记录总数
*/
Long countCustom${ClassName}(@Param(Constants.WRAPPER) Wrapper<${ClassName}> queryWrapper);
/**
* 分页查询${functionName}(自定义条件)
*
* @param page 分页对象
* @param queryWrapper 查询条件
* @return 分页结果
*/
Page<${ClassName}Vo> selectCustom${ClassName}VoPage(@Param("page") Page<${ClassName}> page, @Param(Constants.WRAPPER) Wrapper<${ClassName}> queryWrapper);
/**
* 批量插入${functionName}
*
* @param list ${functionName}对象集合
* @return 影响行数
*/
int batchInsert${ClassName}(@Param("list") List<${ClassName}> list);
/**
* 批量更新${functionName}
*
* @param list ${functionName}对象集合
* @return 影响行数
*/
int batchUpdate${ClassName}(@Param("list") List<${ClassName}> list);
/**
* 根据自定义条件删除${functionName}
*
* @param queryWrapper 删除条件
* @return 影响行数
*/
int deleteCustom${ClassName}(@Param(Constants.WRAPPER) Wrapper<${ClassName}> queryWrapper);
/**
* 根据ID列表批量删除${functionName}
*
* @param ids ID集合
* @return 影响行数
*/
int deleteCustom${ClassName}ByIds(@Param("ids") Collection<${pkColumn.javaType}> ids);
/**
* 检查${functionName}是否存在
*
* @param queryWrapper 查询条件
* @return 是否存在
*/
Boolean exists${ClassName}(@Param(Constants.WRAPPER) Wrapper<${ClassName}> queryWrapper);
#if($table.sub)
/**
* 批量插入${subTable.functionName}
*
* @param list ${subTable.functionName}对象集合
* @return 影响行数
*/
int batch${subClassName}(@Param("list") List<${subClassName}> list);
#end
}

@ -43,7 +43,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
*/
@Override
public ${ClassName}Vo queryById(${pkColumn.javaType} ${pkColumn.javaField}){
return baseMapper.selectVoById(${pkColumn.javaField});
return baseMapper.selectCustom${ClassName}VoById(${pkColumn.javaField});
}
#if($table.crud)
@ -57,7 +57,8 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
@Override
public TableDataInfo<${ClassName}Vo> queryPageList(${ClassName}Bo bo, PageQuery pageQuery) {
LambdaQueryWrapper<${ClassName}> lqw = buildQueryWrapper(bo);
Page<${ClassName}Vo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 使用自定义 Mapper XML + MyBatis-Plus Wrapper 进行分页查询
Page<${ClassName}Vo> result = baseMapper.selectCustom${ClassName}VoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
#end
@ -71,7 +72,8 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service {
@Override
public List<${ClassName}Vo> queryList(${ClassName}Bo bo) {
LambdaQueryWrapper<${ClassName}> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
// 使用自定义 Mapper XML + MyBatis-Plus Wrapper 查询列表
return baseMapper.selectCustom${ClassName}VoList(lqw);
}
private LambdaQueryWrapper<${ClassName}> buildQueryWrapper(${ClassName}Bo bo) {

@ -3,4 +3,140 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${packageName}.mapper.${ClassName}Mapper">
<resultMap type="${packageName}.domain.vo.${ClassName}Vo" id="${ClassName}Result">
</resultMap>
<select id="selectCustom${ClassName}VoList" resultMap="${ClassName}Result">
select #foreach($column in $columns)t.$column.columnName#if($foreach.count != $columns.size()), #end#end
from ${tableName} t
<if test="ew != null">
${ew.customSqlSegment}
</if>
</select>
<!-- 根据ID查询详情 -->
<select id="selectCustom${ClassName}VoById" resultMap="${ClassName}Result">
select #foreach($column in $columns)t.$column.columnName#if($foreach.count != $columns.size()), #end#end
from ${tableName} t
where t.${pkColumn.columnName} = #{${pkColumn.javaField}}
</select>
<!-- 批量查询 - 根据ID列表 -->
<select id="selectCustom${ClassName}VoByIds" resultMap="${ClassName}Result">
select #foreach($column in $columns)t.$column.columnName#if($foreach.count != $columns.size()), #end#end
from ${tableName} t
where t.${pkColumn.columnName} in
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<!-- 统计查询 -->
<select id="countCustom${ClassName}" resultType="java.lang.Long">
select count(1) from ${tableName} t
<if test="ew != null">
${ew.customSqlSegment}
</if>
</select>
<!-- 分页查询(带自定义条件) -->
<select id="selectCustom${ClassName}VoPage" resultMap="${ClassName}Result">
select #foreach($column in $columns)t.$column.columnName#if($foreach.count != $columns.size()), #end#end
from ${tableName} t
<if test="ew != null">
${ew.customSqlSegment}
</if>
</select>
<!-- 批量插入 -->
<insert id="batchInsert${ClassName}">
insert into ${tableName}(
#foreach($column in $columns)
#if(!$column.increment)
$column.columnName#if($foreach.count != $columns.size()),#end
#end
#end
)
values
<foreach collection="list" item="item" separator=",">
(
#foreach($column in $columns)
#if(!$column.increment)
#{item.$column.javaField}#if($foreach.count != $columns.size()),#end
#end
#end
)
</foreach>
</insert>
<!-- 批量更新 -->
<update id="batchUpdate${ClassName}">
<foreach collection="list" item="item" separator=";">
update ${tableName}
<set>
#foreach($column in $columns)
#if(!$column.pk && !$column.increment)
<if test="item.$column.javaField != null#if($column.javaType == 'String') and item.$column.javaField != ''#end">
$column.columnName = #{item.$column.javaField}#if($foreach.count != $columns.size()),#end
</if>
#end
#end
</set>
where ${pkColumn.columnName} = #{item.${pkColumn.javaField}}
</foreach>
</update>
<!-- 根据自定义条件删除 -->
<delete id="deleteCustom${ClassName}">
delete from ${tableName}
<if test="ew != null">
${ew.customSqlSegment}
</if>
</delete>
<!-- 根据ID列表批量删除 -->
<delete id="deleteCustom${ClassName}ByIds">
delete from ${tableName}
where ${pkColumn.columnName} in
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<!-- 检查是否存在 -->
<select id="exists${ClassName}" resultType="java.lang.Boolean">
select count(1) > 0 from ${tableName} t
<if test="ew != null">
${ew.customSqlSegment}
</if>
</select>
#if($table.sub)
<!-- 批量插入子表数据 -->
<insert id="batch${subClassName}">
insert into ${subTableName}(
#foreach($column in $subTable.columns)
#if(!$column.increment)
$column.columnName#if($foreach.count != $subTable.columns.size()),#end
#end
#end
)
values
<foreach collection="list" item="item" separator=",">
(
#foreach($column in $subTable.columns)
#if(!$column.increment)
#{item.$column.javaField}#if($foreach.count != $subTable.columns.size()),#end
#end
#end
)
</foreach>
</insert>
#end
</mapper>

Loading…
Cancel
Save