| 2025.12.09 | 优化Mybatis-Plus模板

This commit is contained in:
Moshow郑锴 2025-12-07 19:37:28 +08:00
parent 6cb2af2c7a
commit 2a354f7aba
4 changed files with 96 additions and 56 deletions

View File

@ -244,6 +244,7 @@ ResultVo.error(message);
# Update Logs # Update Logs
| 更新日期 | 更新内容 | | 更新日期 | 更新内容 |
|:-----------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |:-----------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 2025.12.09 | 优化Mybatis和Mybatis-Plus模板 |
| 2025.12.08 | 引入单元测试和JaCoCo测试覆盖率优化代码覆盖率 [UNIT_TEST_DOCUMENT.md](UNIT_TEST_DOCUMENT.md) | | 2025.12.08 | 引入单元测试和JaCoCo测试覆盖率优化代码覆盖率 [UNIT_TEST_DOCUMENT.md](UNIT_TEST_DOCUMENT.md) |
| 2025.12.07 | 后端重构优化![REFACTORING_DOCUMENT.md](REFACTORING_DOCUMENT.md) ;目录结构调整! | | 2025.12.07 | 后端重构优化![REFACTORING_DOCUMENT.md](REFACTORING_DOCUMENT.md) ;目录结构调整! |
| 2025.09.14 | 优化JSqlParser Engine(DDL Create SQL和Select SQL),适配更高级复杂的SQL | | 2025.09.14 | 优化JSqlParser Engine(DDL Create SQL和Select SQL),适配更高级复杂的SQL |

View File

@ -83,43 +83,51 @@ public class ${classInfo.className}Controller {
* 自动分页查询 * 自动分页查询
*/ */
@PostMapping("/list") @PostMapping("/list")
public Object list(String searchParams, public Object list(@RequestBody ${classInfo.className} ${classInfo.className?uncap_first},@RequestParam(required = false, defaultValue = "0") int page,@RequestParam(required = false, defaultValue = "10") int limit) {
@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "10") int limit) {
log.info("page:"+page+"-limit:"+limit+"-json:"+ JSON.toJSONString(searchParams)); log.info("page:"+page+"-limit:"+limit+"-json:"+ JSON.toJSONString(searchParams));
//分页构造器 //分页构造器
Page<${classInfo.className}> buildPage = new Page<${classInfo.className}>(page,limit); Page<${classInfo.className}> buildPage = new Page<${classInfo.className}>(page,limit);
//条件构造器 //条件构造器
QueryWrapper<${classInfo.className}> queryWrapper = new QueryWrapper<${classInfo.className}>(); QueryWrapper<${classInfo.className}> queryWrapper = new QueryWrapper<${classInfo.className}>();
if(StringUtils.isNotEmpty(searchParams)&&JSON.isValid(searchParams)) { if(JSON.stringify(${classInfo.className?uncap_first}).length()>2) {
${classInfo.className} ${classInfo.className?uncap_first} = JSON.parseObject(searchParams, ${classInfo.className}.class); //自行删除不需要动态查询字段
queryWrapper.eq(StringUtils.isNoneEmpty(${classInfo.className?uncap_first}.get${classInfo.className}Name()), "${classInfo.className?uncap_first}_name", ${classInfo.className?uncap_first}.get${classInfo.className}Name()); queryWrapper.
<#list classInfo.fieldList as fieldItem>
eq(StringUtils.isNoneEmpty(${classInfo.className?uncap_first}.get${fieldItem.fieldName}()), "${fieldItem.fieldName}", ${classInfo.className?uncap_first}.get${fieldItem.fieldName}())
</#list>
;
} }
//执行分页 //执行分页
IPage<${classInfo.className}> pageList = ${classInfo.className?uncap_first}Mapper.selectPage(buildPage, queryWrapper); IPage<${classInfo.className}> pageList = ${classInfo.className?uncap_first}Mapper.selectPage(buildPage, queryWrapper);
//返回结果 //返回结果
return ${returnUtil}.PAGE(pageList.getRecords(),pageList.getTotal()); return ${returnUtil}.PAGE(pageList.getRecords(),pageList.getTotal());
} }
/** /**
* 手工分页查询(按需使用) * 动态条件手工分页查询
* 根据对象属性自动构建条件,如果字段有值则进行分页+指定条件查询,否则仅进行分页查询
*/ */
/*@PostMapping("/list2") @PostMapping("/list")
public Object list2(String searchParams, public Object list(String searchParams, @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int limit) {
@RequestParam(required = false, defaultValue = "0") int page, log.info("page:"+page+"-limit:"+limit+"-json:"+ JSON.toJSONString(searchParams));
@RequestParam(required = false, defaultValue = "10") int limit) {
log.info("searchParams:"+ JSON.toJSONString(searchParams)); // 分页参数处理
//通用模式 int offset = (page - 1) * limit;
${classInfo.className} queryParamDTO = JSON.parseObject(searchParams, ${classInfo.className}.class);
//专用DTO模式 // 查询参数处理
//QueryParamDTO queryParamDTO = JSON.parseObject(searchParams, QueryParamDTO.class); ${classInfo.className} queryParamDTO = new ${classInfo.className}();
//queryParamDTO.setPage((page - 1)* limit); if(StringUtils.isNotEmpty(searchParams) && JSON.isValid(searchParams)) {
//queryParamDTO.setLimit(limit); queryParamDTO = JSON.parseObject(searchParams, ${classInfo.className}.class);
//(page - 1) * limit, limit }
List<${classInfo.className}> itemList = ${classInfo.className?uncap_first}Mapper.pageAll(queryParamDTO,(page - 1)* limit,limit);
Integer itemCount = ${classInfo.className?uncap_first}Mapper.countAll(queryParamDTO); // 使用动态条件查询
List<${classInfo.className}> itemList = ${classInfo.className?uncap_first}Mapper.selectPageByCondition(queryParamDTO, offset, limit);
int itemCount = ${classInfo.className?uncap_first}Mapper.selectPageByConditionCount(queryParamDTO);
//返回结果 //返回结果
return ${returnUtilSuccess}.PAGE(itemList,itemCount); return ${returnUtil}.PAGE(itemList, itemCount);
}*/ }
@GetMapping("/list") @GetMapping("/list")
public ModelAndView listPage(){ public ModelAndView listPage(){
return new ModelAndView("${classInfo.className?uncap_first}-list"); return new ModelAndView("${classInfo.className?uncap_first}-list");
@ -132,16 +140,16 @@ public class ${classInfo.className}Controller {
} }
/** /**
* 发布/暂停(如不需要请屏蔽) * 激活/停用(如不需要请屏蔽)
*/ */
@PostMapping("/publish") @PostMapping("/active")
public Object publish(int id,Integer status){ public Object active(int id,Integer status){
${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("${classInfo.className?uncap_first}_id",id)); ${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("${classInfo.className?uncap_first}_id",id));
if(${classInfo.className?uncap_first}!=null){ if(${classInfo.className?uncap_first}!=null){
${classInfo.className?uncap_first}.setUpdateTime(new Date()); ${classInfo.className?uncap_first}.setUpdateTime(new Date());
${classInfo.className?uncap_first}.setStatus(status); ${classInfo.className?uncap_first}.setStatus(status);
${classInfo.className?uncap_first}Mapper.updateById(${classInfo.className?uncap_first}); ${classInfo.className?uncap_first}Mapper.updateById(${classInfo.className?uncap_first});
return ${returnUtilSuccess}((status==1)?"已发布":"已暂停"); return ${returnUtilSuccess}((status==1)?"已激活":"已停用");
}else if(status.equals(${classInfo.className?uncap_first}.getStatus())){ }else if(status.equals(${classInfo.className?uncap_first}.getStatus())){
return ${returnUtilFailure}("状态不正确"); return ${returnUtilFailure}("状态不正确");
}else{ }else{
@ -150,13 +158,13 @@ public class ${classInfo.className}Controller {
} }
/** /**
* 执行(如不需要请屏蔽) * 测试(如不需要请屏蔽)
*/ */
@PostMapping("/execute") @GetMapping("/test")
public Object execute(){ public Object test(){
return ${returnUtilSuccess}; return ${returnUtilSuccess};
} }
}
} }

View File

@ -16,7 +16,7 @@ import io.swagger.v3.oas.annotations.media.Schema;</#if>
* @date ${.now?string('yyyy-MM-dd')} * @date ${.now?string('yyyy-MM-dd')}
*/ */
<#if isLombok?exists && isLombok==true>@Data</#if><#if isSwagger?exists && isSwagger==true> <#if isLombok?exists && isLombok==true>@Data</#if><#if isSwagger?exists && isSwagger==true>
@Schema"${classInfo.classComment}")</#if> @Schema(description = "${classInfo.classComment}")</#if>
public class ${classInfo.className} implements Serializable { public class ${classInfo.className} implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -2,6 +2,7 @@
<#if isAutoImport?exists && isAutoImport==true> <#if isAutoImport?exists && isAutoImport==true>
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import ${packageName}.entity.${classInfo.className}; import ${packageName}.entity.${classInfo.className};
import java.util.List; import java.util.List;
@ -14,25 +15,55 @@ import java.util.List;
@Mapper @Mapper
public interface ${classInfo.className}Mapper extends BaseMapper<${classInfo.className}> { public interface ${classInfo.className}Mapper extends BaseMapper<${classInfo.className}> {
@Select( /**
"<script>select t0.* from ${classInfo.tableName} t0 " + * 动态条件分页查询 - 根据对象属性自动构建条件
//add here if need left join * 如果字段有值则进行分页+指定条件查询,否则仅进行分页查询
"where 1=1" + */
@Select("""
<script>
SELECT * FROM ${classInfo.tableName}
<where>
<#list classInfo.fieldList as fieldItem> <#list classInfo.fieldList as fieldItem>
"<when test='${fieldItem.fieldName}!=null and ${fieldItem.fieldName}!=&apos;&apos; '> and t0.${fieldItem.columnName}=井{${fieldItem.fieldName}}</when> " + <#if fieldItem.fieldClass?contains("String")>
<if test='queryParamDTO.${fieldItem.fieldName} != null and queryParamDTO.${fieldItem.fieldName} != ""'>
AND ${fieldItem.columnName} = 井{queryParamDTO.${fieldItem.fieldName}}
</if>
<#else>
<if test='queryParamDTO.${fieldItem.fieldName} != null'>
AND ${fieldItem.columnName} = 井{queryParamDTO.${fieldItem.fieldName}}
</if>
</#if>
</#list> </#list>
//add here if need page limit </where>
//" limit ¥{page},¥{limit} " + ORDER BY id DESC
" </script>") LIMIT 井{offset}, 井{limit}
List<${classInfo.className}> pageAll(${classInfo.className} queryParamDTO,int page,int limit); </script>
""")
List<${classInfo.className}> selectPageByCondition(@Param("queryParamDTO") ${classInfo.className} queryParamDTO,
@Param("offset") int offset,
@Param("limit") int limit);
@Select("<script>select count(1) from ${classInfo.tableName} t0 " + /**
//add here if need left join * 动态条件分页查询总数
"where 1=1" + */
@Select("""
<script>
SELECT COUNT(*) FROM ${classInfo.tableName}
<where>
<#list classInfo.fieldList as fieldItem> <#list classInfo.fieldList as fieldItem>
"<when test='${fieldItem.fieldName}!=null and ${fieldItem.fieldName}!=&apos;&apos; '> and t0.${fieldItem.columnName}=井{${fieldItem.fieldName}}</when> " + <#if fieldItem.fieldClass?contains("String")>
<if test='queryParamDTO.${fieldItem.fieldName} != null and queryParamDTO.${fieldItem.fieldName} != ""'>
AND ${fieldItem.columnName} = 井{queryParamDTO.${fieldItem.fieldName}}
</if>
<#else>
<if test='queryParamDTO.${fieldItem.fieldName} != null'>
AND ${fieldItem.columnName} = 井{queryParamDTO.${fieldItem.fieldName}}
</if>
</#if>
</#list> </#list>
" </script>") </where>
int countAll(${classInfo.className} queryParamDTO); </script>
""")
int selectPageByConditionCount(@Param("queryParamDTO") ${classInfo.className} queryParamDTO);
} }