新增返回封装工具类设置,优化对oracle注释comment on column的支持(感谢@liukex的反馈),优化对普通和特殊storage关键字的判断(感谢@AhHeadFloating的反馈 )

This commit is contained in:
moshowgame@126.com
2019-04-29 22:09:37 +08:00
parent dc500df26d
commit 3059e270a3
8 changed files with 73 additions and 45 deletions

View File

@@ -16,6 +16,7 @@ SpringBootCodeGenerator
<tr><td>CSDN博客</td> <td>http://blog.csdn.net/moshowgame</td></tr> <tr><td>CSDN博客</td> <td>http://blog.csdn.net/moshowgame</td></tr>
<tr><td></td> <td></td></tr> <tr><td></td> <td></td></tr>
<tr><td>更新日期</td> <td>更新内容</td></tr> <tr><td>更新日期</td> <td>更新内容</td></tr>
<tr><td>20190429<td>新增返回封装工具类设置优化对oracle注释comment on column的支持感谢@liukex反馈优化对普通和特殊storage关键字的判断感谢@AhHeadFloating的反馈 )。</td></tr>
<tr><td>20190211<td>提交gitignore解决StringUtils.lowerCaseFirst潜在的NPE异常校验修改为@RequestParam参数校验lombok之@Data和@Slf4j优化fix JdbcDAO模板类名显示为中文问题WebMvcConfig整合MessageConverter模板代码分类感谢@liutf和@tfgzs的pull request</td></tr> <tr><td>20190211<td>提交gitignore解决StringUtils.lowerCaseFirst潜在的NPE异常校验修改为@RequestParam参数校验lombok之@Data和@Slf4j优化fix JdbcDAO模板类名显示为中文问题WebMvcConfig整合MessageConverter模板代码分类感谢@liutf和@tfgzs的pull request</td></tr>
<tr><td>20190210<td>实体生成规则切换为包装类型,不再采用基本数据类型,为实体类生成添加显示的默认构造方法(感谢@h2so的pull request</td></tr> <tr><td>20190210<td>实体生成规则切换为包装类型,不再采用基本数据类型,为实体类生成添加显示的默认构造方法(感谢@h2so的pull request</td></tr>
<tr><td>20190106<td>修复处理number/decimal(x,x)类型的逻辑(感谢@arthaschan的反馈修复JdbcTemplates模板两处错误感谢@everflourish的反馈)。</td></tr> <tr><td>20190106<td>修复处理number/decimal(x,x)类型的逻辑(感谢@arthaschan的反馈修复JdbcTemplates模板两处错误感谢@everflourish的反馈)。</td></tr>

View File

@@ -38,7 +38,8 @@ public class IndexController {
public ReturnT<Map<String, String>> codeGenerate(String tableSql, public ReturnT<Map<String, String>> codeGenerate(String tableSql,
//2019-2-10 liutf 修改为@RequestParam参数校验 //2019-2-10 liutf 修改为@RequestParam参数校验
@RequestParam(required = false, defaultValue = "大狼狗") String authorName, @RequestParam(required = false, defaultValue = "大狼狗") String authorName,
@RequestParam(required = false, defaultValue = "com.softdev.system")String packageName @RequestParam(required = false, defaultValue = "com.softdev.system")String packageName,
@RequestParam(required = false, defaultValue = "ApiReturnUtil")String returnUtil
) { ) {
@@ -56,6 +57,7 @@ public class IndexController {
params.put("classInfo", classInfo); params.put("classInfo", classInfo);
params.put("authorName", authorName); params.put("authorName", authorName);
params.put("packageName", packageName); params.put("packageName", packageName);
params.put("returnUtil", returnUtil);
// result // result
Map<String, String> result = new HashMap<String, String>(); Map<String, String> result = new HashMap<String, String>();

View File

@@ -14,8 +14,8 @@ public class ReturnT<T> implements Serializable {
public static final int SUCCESS_CODE = 200; public static final int SUCCESS_CODE = 200;
public static final int FAIL_CODE = 500; public static final int FAIL_CODE = 500;
public static final ReturnT<String> SUCCESS = new ReturnT<String>(null); public static final ReturnT<String> SUCCESS = new ReturnT<>(null);
public static final ReturnT<String> FAIL = new ReturnT<String>(FAIL_CODE, null); public static final ReturnT<String> FAIL = new ReturnT<>(FAIL_CODE, null);
private int code; private int code;
private String msg; private String msg;

View File

@@ -133,20 +133,25 @@ public class TableParseUtil {
} }
String[] fieldLineList = fieldListTmp.split(","); String[] fieldLineList = fieldListTmp.split(",");
if (fieldLineList.length > 0) { if (fieldLineList.length > 0) {
int i=0;//i为了解决primary key关键字出现的地方出现在前3行一般和id有关 int i=0;
//i为了解决primary key关键字出现的地方出现在前3行一般和id有关
for (String columnLine :fieldLineList) { for (String columnLine :fieldLineList) {
i++; i++;
columnLine = columnLine.replaceAll("\n","").replaceAll("\t","").trim(); columnLine = columnLine.replaceAll("\n","").replaceAll("\t","").trim();
// `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', // `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
// 2018-9-18 zhengk 修改为contains提升匹配率和匹配不按照规矩出牌的语句 // 2018-9-18 zhengk 修改为contains提升匹配率和匹配不按照规矩出牌的语句
// 2018-11-8 zhengkai 修复tornadoorz反馈的KEY FK_permission_id (permission_id),KEY FK_role_id (role_id)情况 // 2018-11-8 zhengkai 修复tornadoorz反馈的KEY FK_permission_id (permission_id),KEY FK_role_id (role_id)情况
if (!columnLine.contains("key ")&&!columnLine.contains("constraint")&&!columnLine.contains("using")&&!columnLine.contains("unique") // 2019-2-22 zhengkai 要在条件中使用复杂的表达式
&&!columnLine.contains("storage")&&!columnLine.contains("pctincrease") // 2019-4-29 zhengkai 优化对普通和特殊storage关键字的判断感谢@AhHeadFloating的反馈
boolean specialFlag=(!columnLine.contains("key ")&&!columnLine.contains("constraint")&&!columnLine.contains("using")&&!columnLine.contains("unique")
&&!(columnLine.contains("primary")&&columnLine.indexOf("storage")+3>columnLine.indexOf("("))
&&!columnLine.contains("pctincrease")
&&!columnLine.contains("buffer_pool")&&!columnLine.contains("tablespace") &&!columnLine.contains("buffer_pool")&&!columnLine.contains("tablespace")
&&!(columnLine.contains("primary")&&i>3)){ &&!(columnLine.contains("primary")&&i>3));
if (specialFlag){
//如果是oracle的number(x,x),可能出现最后分割残留的,x),这里做排除处理 //如果是oracle的number(x,x),可能出现最后分割残留的,x),这里做排除处理
if(columnLine.length()<5) continue; if(columnLine.length()<5) {continue;}
//2018-9-16 zhengkai 支持'符号以及空格的oracle语句// userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', //2018-9-16 zhengkai 支持'符号以及空格的oracle语句// userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
String columnName = ""; String columnName = "";
columnLine=columnLine.replaceAll("`"," ").replaceAll("\""," ").replaceAll("'","").replaceAll(" "," ").trim(); columnLine=columnLine.replaceAll("`"," ").replaceAll("\""," ").replaceAll("'","").replaceAll(" "," ").trim();
@@ -160,7 +165,8 @@ public class TableParseUtil {
} }
// field class // field class
columnLine = columnLine.substring(columnLine.indexOf("`")+1).trim(); // int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', columnLine = columnLine.substring(columnLine.indexOf("`")+1).trim();
// int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
String fieldClass = Object.class.getSimpleName(); String fieldClass = Object.class.getSimpleName();
//2018-9-16 zhengk 补充char/clob/blob/json等类型如果类型未知默认为String //2018-9-16 zhengk 补充char/clob/blob/json等类型如果类型未知默认为String
//2018-11-22 lshz0088 处理字段类型的时候不严谨columnLine.contains(" int") 类似这种的,可在前后适当加一些空格之类的加以区分,否则当我的字段包含这些字符的时候,产生类型判断问题。 //2018-11-22 lshz0088 处理字段类型的时候不严谨columnLine.contains(" int") 类似这种的,可在前后适当加一些空格之类的加以区分,否则当我的字段包含这些字符的时候,产生类型判断问题。
@@ -192,8 +198,10 @@ public class TableParseUtil {
// //number(20) fanwei["20"] // //number(20) fanwei["20"]
//如果括号里是1位或者2位且第二位为0则进行特殊处理。只有有小数位都设置为BigDecimal。 //如果括号里是1位或者2位且第二位为0则进行特殊处理。只有有小数位都设置为BigDecimal。
if((fanwei.length>1&&"0".equals(fanwei[1]))||fanwei.length==1){ if((fanwei.length>1&&"0".equals(fanwei[1]))||fanwei.length==1){
int length=Integer.valueOf(fanwei[0]); int length=Integer.parseInt(fanwei[0]);
if(fanwei.length>1) length=Integer.valueOf(fanwei[1]); if(fanwei.length>1) {
length=Integer.valueOf(fanwei[1]);
}
//数字范围9位及一下用Integer大的用Long //数字范围9位及一下用Integer大的用Long
if(length<=9){ if(length<=9){
fieldClass = Integer.class.getSimpleName(); fieldClass = Integer.class.getSimpleName();
@@ -213,8 +221,23 @@ public class TableParseUtil {
// field commentMySQL的一般位于field行而pgsql和oralce多位于后面。 // field commentMySQL的一般位于field行而pgsql和oralce多位于后面。
String fieldComment = null; String fieldComment = null;
if (columnLine.contains("comment")) { if(tableSql.contains("comment on column")&&(tableSql.contains("."+columnName+" is ")||tableSql.contains(".`"+columnName+"` is"))){
String commentTmp = columnLine.substring(columnLine.indexOf("comment")+7).trim(); // '用户ID', //新增对pgsql/oracle的字段备注支持
//COMMENT ON COLUMN public.check_info.check_name IS '检查者名称';
//2018-11-22 lshz0088 正则表达式的点号前面应该加上两个反斜杠,否则会认为是任意字符
//2019-4-29 zhengkai 优化对oracle注释comment on column的支持@liukex
tableSql=tableSql.replaceAll(".`"+columnName+"` is","."+columnName+" is");
Matcher columnCommentMatcher = Pattern.compile("\\."+columnName+" is `").matcher(tableSql);
fieldComment=columnName;
while(columnCommentMatcher.find()){
String columnCommentTmp = columnCommentMatcher.group();
System.out.println(columnCommentTmp);
fieldComment = tableSql.substring(tableSql.indexOf(columnCommentTmp)+columnCommentTmp.length()).trim();
fieldComment = fieldComment.substring(0,fieldComment.indexOf("`")).trim();
}
}else if (columnLine.contains("comment")) {
String commentTmp = columnLine.substring(columnLine.indexOf("comment")+7).trim();
// '用户ID',
if (commentTmp.contains("`") || commentTmp.indexOf("`")!=commentTmp.lastIndexOf("`")) { if (commentTmp.contains("`") || commentTmp.indexOf("`")!=commentTmp.lastIndexOf("`")) {
commentTmp = commentTmp.substring(commentTmp.indexOf("`")+1, commentTmp.lastIndexOf("`")); commentTmp = commentTmp.substring(commentTmp.indexOf("`")+1, commentTmp.lastIndexOf("`"));
} }
@@ -223,17 +246,6 @@ public class TableParseUtil {
commentTmp = commentTmp.substring(0, commentTmp.lastIndexOf(")")+1); commentTmp = commentTmp.substring(0, commentTmp.lastIndexOf(")")+1);
} }
fieldComment = commentTmp; fieldComment = commentTmp;
}else if(tableSql.contains("comment on column")&&tableSql.contains("."+columnName+" is `")){
//新增对pgsql/oracle的字段备注支持
//COMMENT ON COLUMN public.check_info.check_name IS '检查者名称';
//2018-11-22 lshz0088 正则表达式的点号前面应该加上两个反斜杠,否则会认为是任意字符
Matcher columnCommentMatcher = Pattern.compile("\\."+columnName+" is `").matcher(tableSql); // "\\{(.*?)\\}"
while(columnCommentMatcher.find()){
String columnCommentTmp = columnCommentMatcher.group();
System.out.println(columnCommentTmp);
fieldComment = tableSql.substring(tableSql.indexOf(columnCommentTmp)+columnCommentTmp.length()).trim();
fieldComment = fieldComment.substring(0,fieldComment.indexOf("`")).trim();
}
}else{ }else{
//修复comment不存在导致报错的问题 //修复comment不存在导致报错的问题
fieldComment = columnName; fieldComment = columnName;

View File

@@ -25,10 +25,10 @@ public class ${classInfo.className}Controller {
${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,${classInfo.className?uncap_first}.getId()); ${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,${classInfo.className?uncap_first}.getId());
if(${classInfo.className?uncap_first}!=null){ if(${classInfo.className?uncap_first}!=null){
sqlManager.updateById(${classInfo.className?uncap_first}); sqlManager.updateById(${classInfo.className?uncap_first});
return ApiReturnUtil.success("编辑成功"); return ${returnUtil}.success("编辑成功");
}else{ }else{
sqlManager.insert(${classInfo.className?uncap_first}); sqlManager.insert(${classInfo.className?uncap_first});
return ApiReturnUtil.error("保存成功"); return ${returnUtil}.error("保存成功");
} }
} }
@@ -40,9 +40,9 @@ public class ${classInfo.className}Controller {
${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,id); ${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,id);
if(${classInfo.className?uncap_first}!=null){ if(${classInfo.className?uncap_first}!=null){
sqlManager.deleteById(id); sqlManager.deleteById(id);
return ApiReturnUtil.success("删除成功"); return ${returnUtil}.success("删除成功");
}else{ }else{
return ApiReturnUtil.error("没有找到该对象"); return ${returnUtil}.error("没有找到该对象");
} }
} }
@@ -53,9 +53,9 @@ public class ${classInfo.className}Controller {
public Object find(int id){ public Object find(int id){
${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,id); ${classInfo.className} ${classInfo.className?uncap_first}=sqlManager.unique(${classInfo.className}.class,id);
if(${classInfo.className?uncap_first}!=null){ if(${classInfo.className?uncap_first}!=null){
return ApiReturnUtil.success(${classInfo.className?uncap_first}); return ${returnUtil}.success(${classInfo.className?uncap_first});
}else{ }else{
return ApiReturnUtil.error("没有找到该对象"); return ${returnUtil}.error("没有找到该对象");
} }
} }
@@ -67,7 +67,7 @@ public class ${classInfo.className}Controller {
@RequestParam(required = false, defaultValue = "0") int pageNumber, @RequestParam(required = false, defaultValue = "0") int pageNumber,
@RequestParam(required = false, defaultValue = "10") int pageSize) { @RequestParam(required = false, defaultValue = "10") int pageSize) {
List<${classInfo.className}> list = sqlManager.query(${classInfo.className}.class).select(); List<${classInfo.className}> list = sqlManager.query(${classInfo.className}.class).select();
return ApiReturnUtil.error(list); return ${returnUtil}.success(list);
} }
} }

View File

@@ -36,27 +36,27 @@ public class ${classInfo.className}Controller {
/** /**
* 删除 * 删除
*/ */
@GetMapping("/delete") @PostMapping("/delete")
public Object delete(int id){ public Object delete(int id){
Optional<${classInfo.className}> ${classInfo.className?uncap_first}=${classInfo.className?uncap_first}Repository.findById(id); Optional<${classInfo.className}> ${classInfo.className?uncap_first}=${classInfo.className?uncap_first}Repository.findById(id);
if(${classInfo.className?uncap_first}.isPresent()){ if(${classInfo.className?uncap_first}.isPresent()){
${classInfo.className?uncap_first}Repository.deleteById(id); ${classInfo.className?uncap_first}Repository.deleteById(id);
return ApiReturnUtil.success("删除成功"); return ${returnUtil}.success("删除成功");
}else{ }else{
return ApiReturnUtil.error("没有找到该对象"); return ${returnUtil}.error("没有找到该对象");
} }
} }
/** /**
* 查询 * 查询
*/ */
@GetMapping("/find") @PostMapping("/find")
public Object find(int id){ public Object find(int id){
Optional<${classInfo.className}> ${classInfo.className?uncap_first}=${classInfo.className?uncap_first}Repository.findById(id); Optional<${classInfo.className}> ${classInfo.className?uncap_first}=${classInfo.className?uncap_first}Repository.findById(id);
if(${classInfo.className?uncap_first}.isPresent()){ if(${classInfo.className?uncap_first}.isPresent()){
return ApiReturnUtil.success(${classInfo.className?uncap_first}.get()); return ${returnUtil}.success(${classInfo.className?uncap_first}.get());
}else{ }else{
return ApiReturnUtil.error("没有找到该对象"); return ${returnUtil}.error("没有找到该对象");
} }
} }

View File

@@ -26,32 +26,38 @@ public class ${classInfo.className}Controller {
*/ */
@PostMapping("/save") @PostMapping("/save")
public Object save(${classInfo.className} ${classInfo.className?uncap_first}){ public Object save(${classInfo.className} ${classInfo.className?uncap_first}){
return ${classInfo.className?uncap_first}Mapper.insert(${classInfo.className?uncap_first}); ${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("id",id))
if(${classInfo.className?uncap_first}!=null){
${classInfo.className?uncap_first}Mapper.updateById(${classInfo.className?uncap_first});
}else{
${classInfo.className?uncap_first}Mapper.insert(${classInfo.className?uncap_first});
}
return ${returnUtil}.success(${classInfo.className?uncap_first});
} }
/** /**
* 删除 * 删除
*/ */
@GetMapping("/delete") @PostMapping("/delete")
public Object delete(int id){ public Object delete(int id){
${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("id",id)) ${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("id",id))
if(${classInfo.className?uncap_first}!=null){ if(${classInfo.className?uncap_first}!=null){
return ApiReturnUtil.success(${classInfo.className?uncap_first}); return ${returnUtil}.success(${classInfo.className?uncap_first});
}else{ }else{
return ApiReturnUtil.error("没有找到该对象"); return ${returnUtil}.error("没有找到该对象");
} }
} }
/** /**
* 查询 * 查询
*/ */
@GetMapping("/find") @PostMapping("/find")
public Object find(int id){ public Object find(int id){
${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("id",id)) ${classInfo.className} ${classInfo.className?uncap_first} = ${classInfo.className?uncap_first}Mapper.selectOne(new QueryWrapper<${classInfo.className}>().eq("id",id))
if(${classInfo.className?uncap_first}!=null){ if(${classInfo.className?uncap_first}!=null){
return ApiReturnUtil.success(${classInfo.className?uncap_first}); return ${returnUtil}.success(${classInfo.className?uncap_first});
}else{ }else{
return ApiReturnUtil.error("没有找到该对象"); return ${returnUtil}.error("没有找到该对象");
} }
} }
@@ -69,7 +75,7 @@ public class ${classInfo.className}Controller {
//执行分页 //执行分页
IPage<${classInfo.className}> pageList = certPersonMapper.selectPage(page, queryWrapperw); IPage<${classInfo.className}> pageList = certPersonMapper.selectPage(page, queryWrapperw);
//返回结果 //返回结果
return ApiReturnUtil.success(pageList); return ${returnUtil}.success(pageList);
} }
} }

View File

@@ -51,6 +51,7 @@
data: { data: {
"tableSql": tableSql, "tableSql": tableSql,
"packageName":$("#packageName").val(), "packageName":$("#packageName").val(),
"returnUtil":$("#returnUtil").val(),
"authorName":$("#authorName").val() "authorName":$("#authorName").val()
}, },
dataType: "json", dataType: "json",
@@ -118,6 +119,12 @@
</div> </div>
<input type="text" class="form-control" id="packageName" name="packageName" placeholder="com.softdev.system"> <input type="text" class="form-control" id="packageName" name="packageName" placeholder="com.softdev.system">
</div> </div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text">返回封装</span>
</div>
<input type="text" class="form-control" id="returnUtil" name="returnUtil" placeholder="ApiReturnObject">
</div>
<textarea id="ddlSqlArea" placeholder="请输入表结构信息..." class="form-control btn-lg" style="height: 250px;"> <textarea id="ddlSqlArea" placeholder="请输入表结构信息..." class="form-control btn-lg" style="height: 250px;">
CREATE TABLE `userinfo` ( CREATE TABLE `userinfo` (
`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',