Skip to content

Commit 7774819

Browse files
committed
20200503:1.优化对特殊字符的处理,对于包含#和$等特殊字符的,在模板使用井和¥代替便可,escapeString方法会自动处理<br> 2.优化mybatisplus实体类相关(感谢@chunchengmeigui的反馈) 3.修优化对所有类型的判断(感谢@cnlw的反馈) 4.移除swagger-entity,该功能已经包含在‘swagger-ui’的下拉选项中 5.升级hutool和lombok版本
1 parent 0dea9b5 commit 7774819

File tree

13 files changed

+121
-82
lines changed

13 files changed

+121
-82
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
|更新日期|更新内容|
2929
|-|-|
30+
|20200503|1.优化对特殊字符的处理,对于包含#和$等特殊字符的,在模板使用井和¥代替便可,escapeString方法会自动处理<br> 2.优化mybatisplus实体类相关(感谢@chunchengmeigui的反馈) 3.修优化对所有类型的判断(感谢@cnlw的反馈) 4.移除swagger-entity,该功能已经包含在‘swagger-ui’的下拉选项中 5.升级hutool和lombok版本|
3031
|20200306|1.提交一套layuimini+mybatisplus的模板. 2.修复mybatisplus一些相关问题. |
3132
|20200206|1.新增历史记录功能,自动保存最近生成的对象 2.新增swagger开关选项和修复@Column带name参数(感谢@liuyu-struggle的建议) 3.去除mybatis模板中的方括号[]和修改模板里的类注释样式(感谢@gaohanghang的PR)|
3233
|20191229|1.修复bejson安全防护策略拦截问题(感谢@liangbintao@1808083642的反馈) 2.优化字段名含date字符串的处理(感谢@smilexzh的反馈) 3.控制台动态输出项目访问地址(感谢@gaohanghang的提交)|

generator-web/src/main/java/com/softdev/system/generator/service/GeneratorServiceImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ public Map<String, String> getResultByParams(Map<String, Object> params) throws
4949
//beetsql
5050
result.put("beetlmd", freemarkerTool.processString("code-generator/beetlsql/beetlmd.ftl", params));
5151
result.put("beetlentity", freemarkerTool.processString("code-generator/beetlsql/beetlentity.ftl", params));
52-
result.put("beetlentitydto", freemarkerTool.processString("code-generator/beetlsql/beetlentitydto.ftl", params));
5352
result.put("beetlcontroller", freemarkerTool.processString("code-generator/beetlsql/beetlcontroller.ftl", params));
5453
//mybatis plus
5554
result.put("pluscontroller", freemarkerTool.processString("code-generator/mybatis-plus/pluscontroller.ftl", params));
5655
result.put("plusmapper", freemarkerTool.processString("code-generator/mybatis-plus/plusmapper.ftl", params));
56+
result.put("plusentity", freemarkerTool.processString("code-generator/mybatis-plus/plusentity.ftl", params));
5757
//util
5858
result.put("util", freemarkerTool.processString("code-generator/util/util.ftl", params));
5959
result.put("json", freemarkerTool.processString("code-generator/util/json.ftl", params));

generator-web/src/main/java/com/softdev/system/generator/util/FreemarkerTool.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,13 @@ public String processTemplateIntoString(Template template, Object model)
3737
template.process(model, result);
3838
return result.toString();
3939
}
40-
40+
/**
41+
* 传入需要转义的字符串进行转义
42+
* 20200503 zhengkai.blog.csdn.net
43+
* */
44+
public String escapeString(String originStr){
45+
return originStr.replaceAll("井","\\#").replaceAll("¥","\\$");
46+
}
4147
/**
4248
* process String
4349
*
@@ -49,9 +55,10 @@ public String processTemplateIntoString(Template template, Object model)
4955
*/
5056
public String processString(String templateName, Map<String, Object> params)
5157
throws IOException, TemplateException {
52-
58+
//获取对应的模板
5359
Template template = configuration.getTemplate(templateName);
54-
String htmlText = processTemplateIntoString(template, params);
60+
//处理为template并进行转义
61+
String htmlText = escapeString(processTemplateIntoString(template, params));
5562
return htmlText;
5663
}
5764

generator-web/src/main/java/com/softdev/system/generator/util/TableParseUtil.java

+14-12
Original file line numberDiff line numberDiff line change
@@ -194,20 +194,25 @@ public static ClassInfo processTableIntoClassInfo(ParamInfo paramInfo)
194194
String fieldClass = Object.class.getSimpleName();
195195
//2018-9-16 zhengk 补充char/clob/blob/json等类型,如果类型未知,默认为String
196196
//2018-11-22 lshz0088 处理字段类型的时候,不严谨columnLine.contains(" int") 类似这种的,可在前后适当加一些空格之类的加以区分,否则当我的字段包含这些字符的时候,产生类型判断问题。
197-
if (columnLine.contains(" int") || columnLine.contains("smallint")) {
197+
//2020-05-03 MOSHOW.K.ZHENG 优化对所有类型的处理
198+
if (columnLine.contains(" tinyint") ) {
199+
//20191115 MOSHOW.K.ZHENG 支持对tinyint的特殊处理
200+
fieldClass=tinyintTransType;
201+
}
202+
else if (columnLine.contains(" int") || columnLine.contains(" smallint")) {
198203
fieldClass = Integer.class.getSimpleName();
199-
} else if (columnLine.contains("bigint")) {
204+
} else if (columnLine.contains(" bigint")) {
200205
fieldClass = Long.class.getSimpleName();
201-
} else if (columnLine.contains("float")) {
206+
} else if (columnLine.contains(" float")) {
202207
fieldClass = Float.class.getSimpleName();
203-
} else if (columnLine.contains("double")) {
208+
} else if (columnLine.contains(" double")) {
204209
fieldClass = Double.class.getSimpleName();
205-
} else if (columnLine.contains("time") || columnLine.contains(" date") || columnLine.contains("datetime") || columnLine.contains("timestamp")) {
210+
} else if (columnLine.contains(" time") || columnLine.contains(" date") || columnLine.contains(" datetime") || columnLine.contains(" timestamp")) {
206211
fieldClass = Date.class.getSimpleName();
207-
} else if (columnLine.contains("varchar") || columnLine.contains(" text")|| columnLine.contains("char")
208-
|| columnLine.contains("clob")||columnLine.contains("blob")||columnLine.contains("json")) {
212+
} else if (columnLine.contains(" varchar") || columnLine.contains(" text")|| columnLine.contains(" char")
213+
|| columnLine.contains(" clob")||columnLine.contains(" blob")||columnLine.contains(" json")) {
209214
fieldClass = String.class.getSimpleName();
210-
} else if (columnLine.contains("decimal")||columnLine.contains(" number")) {
215+
} else if (columnLine.contains(" decimal")||columnLine.contains(" number")) {
211216
//2018-11-22 lshz0088 建议对number类型增加int,long,BigDecimal的区分判断
212217
//如果startKh大于等于0,则表示有设置取值范围
213218
int startKh=columnLine.indexOf("(");
@@ -239,12 +244,9 @@ public static ClassInfo processTableIntoClassInfo(ParamInfo paramInfo)
239244
}else{
240245
fieldClass = BigDecimal.class.getSimpleName();
241246
}
242-
} else if (columnLine.contains("boolean")) {
247+
} else if (columnLine.contains(" boolean")) {
243248
//20190910 MOSHOW.K.ZHENG 新增对boolean的处理(感谢@violinxsc的反馈)以及修复tinyint类型字段无法生成boolean类型问题(感谢@hahaYhui的反馈)
244249
fieldClass = Boolean.class.getSimpleName();
245-
} else if (columnLine.contains("tinyint") ) {
246-
//20191115 MOSHOW.K.ZHENG 支持对tinyint的特殊处理
247-
fieldClass=tinyintTransType;
248250
} else {
249251
fieldClass = String.class.getSimpleName();
250252
}
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<!--
4+
This is the JRebel configuration file. It maps the running application to your IDE workspace, enabling JRebel reloading for this project.
5+
Refer to https://manuals.jrebel.com/jrebel/standalone/config.html for more information.
6+
-->
7+
<application generated-by="intellij" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://update.zeroturnaround.com/jrebel/rebel-2_1.xsd">
8+
9+
<classpath>
10+
<dir name="E:/workspace/idea with spring/SpringBootCodeGenerator/generator-web/target/classes">
11+
</dir>
12+
</classpath>
13+
14+
</application>

generator-web/src/main/resources/templates/code-generator/beetlsql/beetlentity.ftl

+4-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import java.util.List;
88
* @author ${authorName}
99
* @date ${.now?string('yyyy-MM-dd HH:mm:ss')}
1010
*/
11-
@Data
11+
@Data<#if swagger?exists && swagger==true>
12+
@ApiModel("${classInfo.classComment}")</#if>
1213
public class ${classInfo.className} implements Serializable {
1314

1415
private static final long serialVersionUID = 1L;
@@ -17,7 +18,8 @@ public class ${classInfo.className} implements Serializable {
1718
<#list classInfo.fieldList as fieldItem >
1819
/**
1920
* ${fieldItem.fieldComment}
20-
*/
21+
*/<#if swagger?exists && swagger==true>
22+
@ApiModelProperty("${fieldItem.fieldComment}")</#if>
2123
private ${fieldItem.fieldClass} ${fieldItem.fieldName};
2224

2325
</#list>

generator-web/src/main/resources/templates/code-generator/beetlsql/beetlentitydto.ftl

-27
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package ${packageName}.entity;
2+
3+
import lombok.Data;
4+
import java.util.Date;
5+
import java.util.List;
6+
import java.io.Serializable;
7+
import com.baomidou.mybatisplus.annotation.IdType;
8+
import com.baomidou.mybatisplus.annotation.TableId;
9+
10+
/**
11+
* @description ${classInfo.classComment}
12+
* @author ${authorName}
13+
* @date ${.now?string('yyyy-MM-dd HH:mm:ss')}
14+
*/
15+
@Data
16+
<#if swagger?exists && swagger==true>@ApiModel("${classInfo.classComment}")</#if>
17+
public class ${classInfo.className} implements Serializable {
18+
19+
private static final long serialVersionUID = 1L;
20+
21+
@TableId(type = IdType.AUTO)
22+
<#if classInfo.fieldList?exists && classInfo.fieldList?size gt 0>
23+
<#list classInfo.fieldList as fieldItem >
24+
/**
25+
* ${fieldItem.fieldComment}
26+
*/<#if swagger?exists && swagger==true>
27+
@ApiModelProperty("${fieldItem.fieldComment}")</#if>
28+
private ${fieldItem.fieldClass} ${fieldItem.fieldName};
29+
30+
</#list>
31+
public ${classInfo.className}() {
32+
}
33+
</#if>
34+
35+
}

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

+20
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package ${packageName}.mapper;
22

33
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
44
import org.apache.ibatis.annotations.Mapper;
5+
import org.apache.ibatis.annotations.Select;
56
import ${packageName}.entity.${classInfo.className};
67

78
/**
@@ -12,6 +13,25 @@ import ${packageName}.entity.${classInfo.className};
1213
@Mapper
1314
public interface ${classInfo.className}Mapper extends BaseMapper<${classInfo.className}> {
1415

16+
@Select(
17+
"<script>select t0.* from ${classInfo.tableName} t0 " +
18+
//add here if need left join
19+
"where 1=1" +
20+
<#list classInfo.fieldList as fieldItem >
21+
"<when test='${fieldItem.fieldName}!=null and ${fieldItem.fieldName}!=&apos;&apos; '> and t0.${fieldItem.columnName}=井{${fieldItem.fieldName}}</when> " +
22+
</#list>
23+
//add here if need page limit
24+
//" limit ¥{page},¥{limit} " +
25+
" </script>")
26+
List<${classInfo.className}> pageAll(${classInfo.className} queryParamDTO);
1527

28+
@Select("<script>select count(1) from ${classInfo.tableName} t0 " +
29+
//add here if need left join
30+
"where 1=1" +
31+
<#list classInfo.fieldList as fieldItem >
32+
"<when test='${fieldItem.fieldName}!=null and ${fieldItem.fieldName}!=&apos;&apos; '> and t0.${fieldItem.columnName}=井{${fieldItem.fieldName}}</when> " +
33+
</#list>
34+
" </script>")
35+
int countAll(${classInfo.className} queryParamDTO);
1636

1737
}

generator-web/src/main/resources/templates/code-generator/ui/layui-edit.ftl

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<meta name="renderer" content="webkit">
77
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
88
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
9-
<link rel="stylesheet" href="request.contextPath/static/lib/layui-v2.5.5/css/layui.css" media="all">
10-
<link rel="stylesheet" href="request.contextPath/static/css/public.css" media="all">
9+
<link rel="stylesheet" href="¥{request.contextPath}/static/lib/layui-v2.5.5/css/layui.css" media="all">
10+
<link rel="stylesheet" href="¥{request.contextPath}/static/css/public.css" media="all">
1111
<style>
1212
body {
1313
background-color: #ffffff;
@@ -38,7 +38,7 @@
3838
</div>
3939
</div>
4040
</div>
41-
<script src="request.contextPath/static/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
41+
<script src="¥{request.contextPath}/static/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
4242
<script>
4343
layui.use(['form'], function () {
4444
var form = layui.form,
@@ -49,7 +49,7 @@
4949
form.on('submit(saveBtn)', function (data) {
5050
$.ajax({
5151
type: 'POST',
52-
url: "request.contextPath/${classInfo.className?uncap_first}/save",
52+
url: "¥{request.contextPath}/${classInfo.className?uncap_first}/save",
5353
data:JSON.stringify(data.field),
5454
dataType: "json",
5555
contentType: "application/json",

generator-web/src/main/resources/templates/code-generator/ui/layui-list.ftl

+14-20
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<meta name="renderer" content="webkit">
77
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
88
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
9-
<link rel="stylesheet" href="request.contextPath/static/lib/layui-v2.5.5/css/layui.css" media="all">
10-
<link rel="stylesheet" href="request.contextPath/static/css/public.css" media="all">
9+
<link rel="stylesheet" href="¥{request.contextPath}/static/lib/layui-v2.5.5/css/layui.css" media="all">
10+
<link rel="stylesheet" href="¥{request.contextPath}/static/css/public.css" media="all">
1111
</head>
1212
<body>
1313
<div class="layuimini-container">
@@ -25,7 +25,7 @@
2525
</div>
2626
</div>
2727
<div class="layui-inline">
28-
<label class="layui-form-label">${classInfo.classComment}Name</label>
28+
<label class="layui-form-label">${classInfo.classComment}名称</label>
2929
<div class="layui-input-inline">
3030
<input type="text" name="${classInfo.className?uncap_first}Name" autocomplete="off" class="layui-input">
3131
</div>
@@ -41,7 +41,7 @@
4141
<script type="text/html" id="toolbarDemo">
4242
<div class="layui-btn-container">
4343
<button class="layui-btn layui-btn-sm data-add-btn"> 添加${classInfo.classComment} </button>
44-
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn"> 删除${classInfo.classComment} </button>
44+
<#-- <button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn"> 删除${classInfo.classComment} </button>-->
4545
</div>
4646
</script>
4747

@@ -61,7 +61,7 @@
6161
</script>
6262
</div>
6363
</div>
64-
<script src="request.contextPath/static/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
64+
<script src="¥{request.contextPath}/static/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
6565
<script>
6666
layui.use(['form', 'table'], function () {
6767
var $ = layui.jquery,
@@ -72,7 +72,7 @@
7272
table.render({
7373
elem: '#currentTableId',
7474
method: 'post',
75-
url: 'request.contextPath/${classInfo.className?uncap_first}/list',
75+
url: '¥{request.contextPath}/${classInfo.className?uncap_first}/list',
7676
toolbar: '#toolbarDemo',
7777
defaultToolbar: ['filter', 'exports', 'print', {
7878
title: '提示',
@@ -88,8 +88,8 @@
8888
</#if>
8989
{title: '操作', minWidth: 50, templet: '#currentTableBar', fixed: "right", align: "center"}
9090
]],
91-
limits: [5, 20, 50 , 100],
92-
limit: 5,
91+
limits: [10, 20, 50 , 100],
92+
limit: 10,
9393
page: true
9494
});
9595
@@ -123,12 +123,9 @@
123123
maxmin:true,
124124
shadeClose: true,
125125
area: ['800px', '500px'],
126-
content: 'request.contextPath/${classInfo.className?uncap_first}/edit?id=0',
127-
});
128-
$(window).on("resize", function () {
129-
obj.del();
130-
layer.full(index);
126+
content: '¥{request.contextPath}/${classInfo.className?uncap_first}/edit?id=0',
131127
});
128+
layer.full(index);
132129
return false;
133130
});
134131
@@ -149,24 +146,21 @@
149146
var data = obj.data;
150147
if (obj.event === 'edit') {
151148
var index = layer.open({
152-
title: '编辑用户',
149+
title: '编辑${classInfo.classComment}',
153150
type: 2,
154151
shade: 0.2,
155152
maxmin:true,
156153
shadeClose: true,
157154
area: ['800px', '500px'],
158-
content: 'request.contextPath/${classInfo.className?uncap_first}/edit?id='+obj.data.${classInfo.className?uncap_first}Id,
159-
});
160-
$(window).on("resize", function () {
161-
obj.del();
162-
layer.full(index);
155+
content: '¥{request.contextPath}/${classInfo.className?uncap_first}/edit?id='+obj.data.${classInfo.className?uncap_first}Id,
163156
});
157+
layer.full(index);
164158
return false;
165159
} else if (obj.event === 'delete') {
166160
layer.confirm('真的删除行么', function (index) {
167161
$.ajax({
168162
type: 'POST',
169-
url: "request.contextPath/${classInfo.className?uncap_first}/delete",
163+
url: "¥{request.contextPath}/${classInfo.className?uncap_first}/delete",
170164
data:{"id":obj.data.${classInfo.className?uncap_first}Id},
171165
success: function (responseData) {
172166
if (responseData.code === 200) {

generator-web/src/main/resources/templates/index.ftl

+1-10
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ CREATE TABLE 'userinfo' (
324324
</div>
325325
</div>
326326
<div class="btn-group" role="group" aria-label="First group">
327+
<button type="button" class="btn btn-default generator" id="plusentity">entity</button>
327328
<button type="button" class="btn btn-default generator" id="plusmapper">mapper</button>
328329
<button type="button" class="btn btn-default generator" id="pluscontroller">controller</button>
329330
</div>
@@ -397,16 +398,6 @@ CREATE TABLE 'userinfo' (
397398
</div>
398399
</div>
399400
<div class="row" style="margin-top: 10px;">
400-
<div class="btn-toolbar col-md-5" role="toolbar" aria-label="Toolbar with button groups">
401-
<div class="input-group">
402-
<div class="input-group-prepend">
403-
<div class="btn btn-secondary disabled setWidth" id="btnGroupAddon">DTO</div>
404-
</div>
405-
</div>
406-
<div class="btn-group" role="group" aria-label="First group">
407-
<button type="button" class="btn btn-default generator" id="beetlentitydto">entitydto(lombok+swagger)</button>
408-
</div>
409-
</div>
410401
<div class="btn-toolbar col-md-5" role="toolbar" aria-label="Toolbar with button groups">
411402
<div class="input-group">
412403
<div class="input-group-prepend">

0 commit comments

Comments
 (0)