diff --git a/README.md b/README.md index fc03296..fcebc7c 100644 --- a/README.md +++ b/README.md @@ -244,6 +244,7 @@ ResultVo.error(message); # Update Logs | 更新日期 | 更新内容 | |:-----------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 2025.12.09 | 优化Mybatis和Mybatis-Plus模板 | | 2025.12.08 | 引入单元测试和JaCoCo测试覆盖率,优化代码覆盖率 [UNIT_TEST_DOCUMENT.md](UNIT_TEST_DOCUMENT.md) | | 2025.12.07 | 后端重构优化![REFACTORING_DOCUMENT.md](REFACTORING_DOCUMENT.md) ;目录结构调整! | | 2025.09.14 | 优化JSqlParser Engine(DDL Create SQL和Select SQL),适配更高级复杂的SQL | diff --git a/src/main/resources/templates/code-generator/mybatis-plus/pluscontroller.ftl b/src/main/resources/templates/code-generator/mybatis-plus/pluscontroller.ftl index 903b82b..c404c49 100644 --- a/src/main/resources/templates/code-generator/mybatis-plus/pluscontroller.ftl +++ b/src/main/resources/templates/code-generator/mybatis-plus/pluscontroller.ftl @@ -43,11 +43,11 @@ public class ${classInfo.className}Controller { if(old${classInfo.className}!=null){ ${classInfo.className?uncap_first}Mapper.updateById(${classInfo.className?uncap_first}); }else{ - if(${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("${classInfo.className?uncap_first}_name",${classInfo.className?uncap_first}.get${classInfo.className}Name()))!=null){ - return ${returnUtilFailure}("保存失败,名字重复"); - } - ${classInfo.className?uncap_first}.setCreateTime(new Date()); - ${classInfo.className?uncap_first}Mapper.insert(${classInfo.className?uncap_first}); + if(${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("${classInfo.className?uncap_first}_name",${classInfo.className?uncap_first}.get${classInfo.className}Name()))!=null){ + return ${returnUtilFailure}("保存失败,名字重复"); + } + ${classInfo.className?uncap_first}.setCreateTime(new Date()); + ${classInfo.className?uncap_first}Mapper.insert(${classInfo.className?uncap_first}); } return ${returnUtilSuccess}("保存成功"); } @@ -83,43 +83,51 @@ public class ${classInfo.className}Controller { * 自动分页查询 */ @PostMapping("/list") - public Object list(String searchParams, - @RequestParam(required = false, defaultValue = "0") int page, - @RequestParam(required = false, defaultValue = "10") int limit) { + public Object list(@RequestBody ${classInfo.className} ${classInfo.className?uncap_first},@RequestParam(required = false, defaultValue = "0") int page,@RequestParam(required = false, defaultValue = "10") int limit) { log.info("page:"+page+"-limit:"+limit+"-json:"+ JSON.toJSONString(searchParams)); //分页构造器 Page<${classInfo.className}> buildPage = new Page<${classInfo.className}>(page,limit); //条件构造器 QueryWrapper<${classInfo.className}> queryWrapper = new QueryWrapper<${classInfo.className}>(); - if(StringUtils.isNotEmpty(searchParams)&&JSON.isValid(searchParams)) { - ${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()); + if(JSON.stringify(${classInfo.className?uncap_first}).length()>2) { + //自行删除不需要动态查询字段 + 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}()) + + ; } //执行分页 IPage<${classInfo.className}> pageList = ${classInfo.className?uncap_first}Mapper.selectPage(buildPage, queryWrapper); //返回结果 return ${returnUtil}.PAGE(pageList.getRecords(),pageList.getTotal()); } + /** - * 手工分页查询(按需使用) + * 动态条件手工分页查询 + * 根据对象属性自动构建条件,如果字段有值则进行分页+指定条件查询,否则仅进行分页查询 */ - /*@PostMapping("/list2") - public Object list2(String searchParams, - @RequestParam(required = false, defaultValue = "0") int page, - @RequestParam(required = false, defaultValue = "10") int limit) { - log.info("searchParams:"+ JSON.toJSONString(searchParams)); - //通用模式 - ${classInfo.className} queryParamDTO = JSON.parseObject(searchParams, ${classInfo.className}.class); - //专用DTO模式 - //QueryParamDTO queryParamDTO = JSON.parseObject(searchParams, QueryParamDTO.class); - //queryParamDTO.setPage((page - 1)* limit); - //queryParamDTO.setLimit(limit); - //(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); + @PostMapping("/list") + public Object list(String searchParams, @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int limit) { + log.info("page:"+page+"-limit:"+limit+"-json:"+ JSON.toJSONString(searchParams)); + + // 分页参数处理 + int offset = (page - 1) * limit; + + // 查询参数处理 + ${classInfo.className} queryParamDTO = new ${classInfo.className}(); + if(StringUtils.isNotEmpty(searchParams) && JSON.isValid(searchParams)) { + queryParamDTO = JSON.parseObject(searchParams, ${classInfo.className}.class); + } + + // 使用动态条件查询 + 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") public ModelAndView listPage(){ return new ModelAndView("${classInfo.className?uncap_first}-list"); @@ -132,16 +140,16 @@ public class ${classInfo.className}Controller { } /** - * 发布/暂停(如不需要请屏蔽) + * 激活/停用(如不需要请屏蔽) */ - @PostMapping("/publish") - public Object publish(int id,Integer status){ + @PostMapping("/active") + 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)); if(${classInfo.className?uncap_first}!=null){ ${classInfo.className?uncap_first}.setUpdateTime(new Date()); ${classInfo.className?uncap_first}.setStatus(status); ${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())){ return ${returnUtilFailure}("状态不正确"); }else{ @@ -150,13 +158,13 @@ public class ${classInfo.className}Controller { } /** - * 执行(如不需要请屏蔽) + * 测试(如不需要请屏蔽) */ - @PostMapping("/execute") - public Object execute(){ + @GetMapping("/test") + public Object test(){ return ${returnUtilSuccess}; } -} + } diff --git a/src/main/resources/templates/code-generator/mybatis-plus/plusentity.ftl b/src/main/resources/templates/code-generator/mybatis-plus/plusentity.ftl index f129a29..068e891 100644 --- a/src/main/resources/templates/code-generator/mybatis-plus/plusentity.ftl +++ b/src/main/resources/templates/code-generator/mybatis-plus/plusentity.ftl @@ -16,7 +16,7 @@ import io.swagger.v3.oas.annotations.media.Schema; * @date ${.now?string('yyyy-MM-dd')} */ <#if isLombok?exists && isLombok==true>@Data<#if isSwagger?exists && isSwagger==true> -@Schema"${classInfo.classComment}") +@Schema(description = "${classInfo.classComment}") public class ${classInfo.className} implements Serializable { private static final long serialVersionUID = 1L; diff --git a/src/main/resources/templates/code-generator/mybatis-plus/plusmapper.ftl b/src/main/resources/templates/code-generator/mybatis-plus/plusmapper.ftl index 438b514..011126b 100644 --- a/src/main/resources/templates/code-generator/mybatis-plus/plusmapper.ftl +++ b/src/main/resources/templates/code-generator/mybatis-plus/plusmapper.ftl @@ -2,6 +2,7 @@ <#if isAutoImport?exists && isAutoImport==true> import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import ${packageName}.entity.${classInfo.className}; import java.util.List; @@ -14,25 +15,55 @@ import java.util.List; @Mapper public interface ${classInfo.className}Mapper extends BaseMapper<${classInfo.className}> { - @Select( - "") - List<${classInfo.className}> pageAll(${classInfo.className} queryParamDTO,int page,int limit); + /** + * 动态条件分页查询 - 根据对象属性自动构建条件 + * 如果字段有值则进行分页+指定条件查询,否则仅进行分页查询 + */ + @Select(""" + + """) + List<${classInfo.className}> selectPageByCondition(@Param("queryParamDTO") ${classInfo.className} queryParamDTO, + @Param("offset") int offset, + @Param("limit") int limit); - @Select("") - int countAll(${classInfo.className} queryParamDTO); + /** + * 动态条件分页查询总数 + */ + @Select(""" + + """) + int selectPageByConditionCount(@Param("queryParamDTO") ${classInfo.className} queryParamDTO); }