Skip to content

Commit 2a354f7

Browse files
committed
| 2025.12.09 | 优化Mybatis-Plus模板
1 parent 6cb2af2 commit 2a354f7

File tree

4 files changed

+96
-56
lines changed

4 files changed

+96
-56
lines changed

README.md

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

src/main/resources/templates/code-generator/mybatis-plus/pluscontroller.ftl

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ public class ${classInfo.className}Controller {
4343
if(old${classInfo.className}!=null){
4444
${classInfo.className?uncap_first}Mapper.updateById(${classInfo.className?uncap_first});
4545
}else{
46-
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){
47-
return ${returnUtilFailure}("保存失败,名字重复");
48-
}
49-
${classInfo.className?uncap_first}.setCreateTime(new Date());
50-
${classInfo.className?uncap_first}Mapper.insert(${classInfo.className?uncap_first});
46+
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){
47+
return ${returnUtilFailure}("保存失败,名字重复");
48+
}
49+
${classInfo.className?uncap_first}.setCreateTime(new Date());
50+
${classInfo.className?uncap_first}Mapper.insert(${classInfo.className?uncap_first});
5151
}
5252
return ${returnUtilSuccess}("保存成功");
5353
}
@@ -83,43 +83,51 @@ public class ${classInfo.className}Controller {
8383
* 自动分页查询
8484
*/
8585
@PostMapping("/list")
86-
public Object list(String searchParams,
87-
@RequestParam(required = false, defaultValue = "0") int page,
88-
@RequestParam(required = false, defaultValue = "10") int limit) {
86+
public Object list(@RequestBody ${classInfo.className} ${classInfo.className?uncap_first},@RequestParam(required = false, defaultValue = "0") int page,@RequestParam(required = false, defaultValue = "10") int limit) {
8987
log.info("page:"+page+"-limit:"+limit+"-json:"+ JSON.toJSONString(searchParams));
9088
//分页构造器
9189
Page<${classInfo.className}> buildPage = new Page<${classInfo.className}>(page,limit);
9290
//条件构造器
9391
QueryWrapper<${classInfo.className}> queryWrapper = new QueryWrapper<${classInfo.className}>();
94-
if(StringUtils.isNotEmpty(searchParams)&&JSON.isValid(searchParams)) {
95-
${classInfo.className} ${classInfo.className?uncap_first} = JSON.parseObject(searchParams, ${classInfo.className}.class);
96-
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());
92+
if(JSON.stringify(${classInfo.className?uncap_first}).length()>2) {
93+
//自行删除不需要动态查询字段
94+
queryWrapper.
95+
<#list classInfo.fieldList as fieldItem>
96+
eq(StringUtils.isNoneEmpty(${classInfo.className?uncap_first}.get${fieldItem.fieldName}()), "${fieldItem.fieldName}", ${classInfo.className?uncap_first}.get${fieldItem.fieldName}())
97+
</#list>
98+
;
9799
}
98100
//执行分页
99101
IPage<${classInfo.className}> pageList = ${classInfo.className?uncap_first}Mapper.selectPage(buildPage, queryWrapper);
100102
//返回结果
101103
return ${returnUtil}.PAGE(pageList.getRecords(),pageList.getTotal());
102104
}
105+
103106
/**
104-
* 手工分页查询(按需使用)
107+
* 动态条件手工分页查询
108+
* 根据对象属性自动构建条件,如果字段有值则进行分页+指定条件查询,否则仅进行分页查询
105109
*/
106-
/*@PostMapping("/list2")
107-
public Object list2(String searchParams,
108-
@RequestParam(required = false, defaultValue = "0") int page,
109-
@RequestParam(required = false, defaultValue = "10") int limit) {
110-
log.info("searchParams:"+ JSON.toJSONString(searchParams));
111-
//通用模式
112-
${classInfo.className} queryParamDTO = JSON.parseObject(searchParams, ${classInfo.className}.class);
113-
//专用DTO模式
114-
//QueryParamDTO queryParamDTO = JSON.parseObject(searchParams, QueryParamDTO.class);
115-
//queryParamDTO.setPage((page - 1)* limit);
116-
//queryParamDTO.setLimit(limit);
117-
//(page - 1) * limit, limit
118-
List<${classInfo.className}> itemList = ${classInfo.className?uncap_first}Mapper.pageAll(queryParamDTO,(page - 1)* limit,limit);
119-
Integer itemCount = ${classInfo.className?uncap_first}Mapper.countAll(queryParamDTO);
110+
@PostMapping("/list")
111+
public Object list(String searchParams, @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "10") int limit) {
112+
log.info("page:"+page+"-limit:"+limit+"-json:"+ JSON.toJSONString(searchParams));
113+
114+
// 分页参数处理
115+
int offset = (page - 1) * limit;
116+
117+
// 查询参数处理
118+
${classInfo.className} queryParamDTO = new ${classInfo.className}();
119+
if(StringUtils.isNotEmpty(searchParams) && JSON.isValid(searchParams)) {
120+
queryParamDTO = JSON.parseObject(searchParams, ${classInfo.className}.class);
121+
}
122+
123+
// 使用动态条件查询
124+
List<${classInfo.className}> itemList = ${classInfo.className?uncap_first}Mapper.selectPageByCondition(queryParamDTO, offset, limit);
125+
int itemCount = ${classInfo.className?uncap_first}Mapper.selectPageByConditionCount(queryParamDTO);
126+
120127
//返回结果
121-
return ${returnUtilSuccess}.PAGE(itemList,itemCount);
122-
}*/
128+
return ${returnUtil}.PAGE(itemList, itemCount);
129+
}
130+
123131
@GetMapping("/list")
124132
public ModelAndView listPage(){
125133
return new ModelAndView("${classInfo.className?uncap_first}-list");
@@ -132,16 +140,16 @@ public class ${classInfo.className}Controller {
132140
}
133141

134142
/**
135-
* 发布/暂停(如不需要请屏蔽)
143+
* 激活/停用(如不需要请屏蔽)
136144
*/
137-
@PostMapping("/publish")
138-
public Object publish(int id,Integer status){
145+
@PostMapping("/active")
146+
public Object active(int id,Integer status){
139147
${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("${classInfo.className?uncap_first}_id",id));
140148
if(${classInfo.className?uncap_first}!=null){
141149
${classInfo.className?uncap_first}.setUpdateTime(new Date());
142150
${classInfo.className?uncap_first}.setStatus(status);
143151
${classInfo.className?uncap_first}Mapper.updateById(${classInfo.className?uncap_first});
144-
return ${returnUtilSuccess}((status==1)?"已发布":"已暂停");
152+
return ${returnUtilSuccess}((status==1)?"已激活":"已停用");
145153
}else if(status.equals(${classInfo.className?uncap_first}.getStatus())){
146154
return ${returnUtilFailure}("状态不正确");
147155
}else{
@@ -150,13 +158,13 @@ public class ${classInfo.className}Controller {
150158
}
151159

152160
/**
153-
* 执行(如不需要请屏蔽)
161+
* 测试(如不需要请屏蔽)
154162
*/
155-
@PostMapping("/execute")
156-
public Object execute(){
163+
@GetMapping("/test")
164+
public Object test(){
157165
return ${returnUtilSuccess};
158166
}
159-
}
167+
160168
}
161169

162170

src/main/resources/templates/code-generator/mybatis-plus/plusentity.ftl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import io.swagger.v3.oas.annotations.media.Schema;</#if>
1616
* @date ${.now?string('yyyy-MM-dd')}
1717
*/
1818
<#if isLombok?exists && isLombok==true>@Data</#if><#if isSwagger?exists && isSwagger==true>
19-
@Schema"${classInfo.classComment}")</#if>
19+
@Schema(description = "${classInfo.classComment}")</#if>
2020
public class ${classInfo.className} implements Serializable {
2121

2222
private static final long serialVersionUID = 1L;

src/main/resources/templates/code-generator/mybatis-plus/plusmapper.ftl

Lines changed: 50 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<#if isAutoImport?exists && isAutoImport==true>
33
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
44
import org.apache.ibatis.annotations.Mapper;
5+
import org.apache.ibatis.annotations.Param;
56
import org.apache.ibatis.annotations.Select;
67
import ${packageName}.entity.${classInfo.className};
78
import java.util.List;
@@ -14,25 +15,55 @@ import java.util.List;
1415
@Mapper
1516
public interface ${classInfo.className}Mapper extends BaseMapper<${classInfo.className}> {
1617

17-
@Select(
18-
"<script>select t0.* from ${classInfo.tableName} t0 " +
19-
//add here if need left join
20-
"where 1=1" +
21-
<#list classInfo.fieldList as fieldItem >
22-
"<when test='${fieldItem.fieldName}!=null and ${fieldItem.fieldName}!=&apos;&apos; '> and t0.${fieldItem.columnName}=井{${fieldItem.fieldName}}</when> " +
23-
</#list>
24-
//add here if need page limit
25-
//" limit ¥{page},¥{limit} " +
26-
" </script>")
27-
List<${classInfo.className}> pageAll(${classInfo.className} queryParamDTO,int page,int limit);
18+
/**
19+
* 动态条件分页查询 - 根据对象属性自动构建条件
20+
* 如果字段有值则进行分页+指定条件查询,否则仅进行分页查询
21+
*/
22+
@Select("""
23+
<script>
24+
SELECT * FROM ${classInfo.tableName}
25+
<where>
26+
<#list classInfo.fieldList as fieldItem>
27+
<#if fieldItem.fieldClass?contains("String")>
28+
<if test='queryParamDTO.${fieldItem.fieldName} != null and queryParamDTO.${fieldItem.fieldName} != ""'>
29+
AND ${fieldItem.columnName} = 井{queryParamDTO.${fieldItem.fieldName}}
30+
</if>
31+
<#else>
32+
<if test='queryParamDTO.${fieldItem.fieldName} != null'>
33+
AND ${fieldItem.columnName} = 井{queryParamDTO.${fieldItem.fieldName}}
34+
</if>
35+
</#if>
36+
</#list>
37+
</where>
38+
ORDER BY id DESC
39+
LIMIT 井{offset}, 井{limit}
40+
</script>
41+
""")
42+
List<${classInfo.className}> selectPageByCondition(@Param("queryParamDTO") ${classInfo.className} queryParamDTO,
43+
@Param("offset") int offset,
44+
@Param("limit") int limit);
2845
29-
@Select("<script>select count(1) from ${classInfo.tableName} t0 " +
30-
//add here if need left join
31-
"where 1=1" +
32-
<#list classInfo.fieldList as fieldItem >
33-
"<when test='${fieldItem.fieldName}!=null and ${fieldItem.fieldName}!=&apos;&apos; '> and t0.${fieldItem.columnName}=井{${fieldItem.fieldName}}</when> " +
34-
</#list>
35-
" </script>")
36-
int countAll(${classInfo.className} queryParamDTO);
46+
/**
47+
* 动态条件分页查询总数
48+
*/
49+
@Select("""
50+
<script>
51+
SELECT COUNT(*) FROM ${classInfo.tableName}
52+
<where>
53+
<#list classInfo.fieldList as fieldItem>
54+
<#if fieldItem.fieldClass?contains("String")>
55+
<if test='queryParamDTO.${fieldItem.fieldName} != null and queryParamDTO.${fieldItem.fieldName} != ""'>
56+
AND ${fieldItem.columnName} = 井{queryParamDTO.${fieldItem.fieldName}}
57+
</if>
58+
<#else>
59+
<if test='queryParamDTO.${fieldItem.fieldName} != null'>
60+
AND ${fieldItem.columnName} = 井{queryParamDTO.${fieldItem.fieldName}}
61+
</if>
62+
</#if>
63+
</#list>
64+
</where>
65+
</script>
66+
""")
67+
int selectPageByConditionCount(@Param("queryParamDTO") ${classInfo.className} queryParamDTO);
3768
3869
}

0 commit comments

Comments
 (0)