From bd962e6fe6f4418fc6da377f744b2689a5be778f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Wed, 9 Oct 2024 20:13:03 +0800 Subject: [PATCH] 'commit' --- dsUtils/pom.xml | 17 + .../GenerateCode/AutoCreatedEntityName.java | 144 +++++++++ .../GenerateCode/AutoCreatedModelFile.java | 306 ++++++++++++++++++ .../GenerateCode/DataBeasTypeToJavaType.java | 28 ++ .../dsideal/GenerateCode/FileNameManager.java | 79 +++++ .../java/com/dsideal/GenerateCode/so.java | 7 + dsUtils/target/dsUtils-1.0.jar | Bin 2200 -> 0 bytes dsUtils/target/maven-archiver/pom.properties | 3 - .../compile/default-compile/createdFiles.lst | 1 - .../compile/default-compile/inputFiles.lst | 4 + 10 files changed, 585 insertions(+), 4 deletions(-) create mode 100644 dsUtils/src/main/java/com/dsideal/GenerateCode/AutoCreatedEntityName.java create mode 100644 dsUtils/src/main/java/com/dsideal/GenerateCode/AutoCreatedModelFile.java create mode 100644 dsUtils/src/main/java/com/dsideal/GenerateCode/DataBeasTypeToJavaType.java create mode 100644 dsUtils/src/main/java/com/dsideal/GenerateCode/FileNameManager.java create mode 100644 dsUtils/src/main/java/com/dsideal/GenerateCode/so.java delete mode 100644 dsUtils/target/dsUtils-1.0.jar delete mode 100644 dsUtils/target/maven-archiver/pom.properties diff --git a/dsUtils/pom.xml b/dsUtils/pom.xml index 442dfb2f..d6176859 100644 --- a/dsUtils/pom.xml +++ b/dsUtils/pom.xml @@ -17,7 +17,24 @@ + + + com.jfinal + jfinal + ${jfinal.version} + + + com.jfinal + jfinal-undertow + ${jfinal-undertow.version} + + + + com.jfinal + cos + ${jfinal-cos.version} + diff --git a/dsUtils/src/main/java/com/dsideal/GenerateCode/AutoCreatedEntityName.java b/dsUtils/src/main/java/com/dsideal/GenerateCode/AutoCreatedEntityName.java new file mode 100644 index 00000000..dde9f121 --- /dev/null +++ b/dsUtils/src/main/java/com/dsideal/GenerateCode/AutoCreatedEntityName.java @@ -0,0 +1,144 @@ +package com.dsideal.GenerateCode; + +import java.io.FileWriter; +import java.io.IOException; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import com.jfinal.core.JFinal; +import com.jfinal.plugin.activerecord.DbKit; +import com.dsideal.GenerateCode.so; + +public class AutoCreatedEntityName { + + public AutoCreatedEntityName() { + + } + + /*** + * 生成表实体 + */ + @SuppressWarnings("rawtypes") + private String getEntity(String tableName, Map property,String packagename) { + String ln = "\r\n"; + StringBuffer sb = new StringBuffer(); + sb.append(ln+"\t/***\t\r\n\t*表名:"+tableName+"\t\r\n\t*/"); + sb.append(ln + "\tpublic static final class " + FileNameManager.CamelCase(tableName.split("_")) + "{" + ln); + sb.append("\t\tpublic static final String " + "tableName" + "=\"" + tableName+ "\";" + ln); + Iterator i=property.entrySet().iterator(); + while(i.hasNext()){ + Map.Entry e=(Map.Entry)i.next(); + sb.append("\t\tpublic static final String " + + FileNameManager.CamelCase(e.getKey().toString().split("_")) + "=\"" + e.getKey().toString() + + "\";" + ln); + } + sb.append("\t\tpublic static final String[] all={"); + + Iterator is=property.entrySet().iterator(); + while(is.hasNext()){ + Map.Entry e=(Map.Entry)is.next(); + sb.append("\r\n\t\t\t"); + sb.append(FileNameManager.CamelCase(e.getKey().toString().split("_"))); + sb.append(","); + } + sb.deleteCharAt(sb.length()-1);; + sb.append("\r\n\t\t};\r\n"); + sb.append("\t\tpublic static final Integer size=" + property.size() + ";" + + ln); + sb.append("\t}" + ln); + try { + new AutoCreatedModelFile(FileNameManager.CamelCase(tableName.split("_")),property,packagename); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return sb.toString(); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private String CreatedRFile(Map> map,String packagename) + { + + String ln = "\r\n"; + StringBuffer sb = new StringBuffer(); + sb.append(ln +"package "+packagename+";"+ln+ + "/***"+ln+ + " * 表文件结构。"+ln+ + " * 对应表文件名。"+ln+ + " * 在Model中不需要记住对应的表名。"+ln+ + " * 只用此文件中对应的名称。"+ln+ + " * 同时避免了字段名修改,删除后程序结构破坏。"+ln+ + " * @author 石啸天"+ln+ + " *"+ln+ + " */"+ln+ + "public final class R {"+ln + ); + + Iterator i=map.entrySet().iterator(); + while(i.hasNext()){//只遍历一次,速度快 + Map.Entry e=(Map.Entry)i.next(); + sb.append(getEntity(e.getKey().toString(),(Map)e.getValue(),packagename)); + } + sb.append(ln + "}"); + return sb.toString(); + } + /*** + * 读取数组中全部的数据表生成对应R文件 + * @param tableName 表名数组 + */ + public void created(String[] tableName,String packagename) { + DataBeasTypeToJavaType dtj=new DataBeasTypeToJavaType(); + so.p("开始生成实体R文件"); + Connection conn = null; + PreparedStatement colunmsPs = null; + Map> all = new HashMap>(); + try { + conn = DbKit.getConfig().getConnection(); + for(int i=0;i colunms = new HashMap(); + ResultSet columnsRs = colunmsPs.executeQuery(); + // 获取对应表中的字段 + while (columnsRs.next()) { +// colunms.add(columnsRs.getString(1)); +// so.p("字段 "+columnsRs.getString(1)+" "+columnsRs.getString(2).split(")")[0]); + colunms.put(columnsRs.getString(1),dtj.get(columnsRs.getString(2).split("\\(")[0])); + } + so.p("表为 " + FileNameManager.CamelCase(tableName[i].split("_"))); + all.put(tableName[i],colunms); + colunmsPs.close(); + } + conn.close(); +// so.p(CreatedRFile(all,packagename)); + so.p(packagename); + String[] pn=packagename.split("\\."); +// so.p(pn[0]); + StringBuffer file=new StringBuffer(); + String dir=JFinal.me().getServletContext().getRealPath("/"); + file.append(dir.substring(0, dir.length()-7)+"src"); + for(String p:pn) + { + file.append("\\"); + file.append(p); + } + so.p(file.toString()); + FileWriter fileWriter=new FileWriter(file.toString()+"/"+"R.java"); + fileWriter.write(CreatedRFile(all,packagename)); + fileWriter.flush(); + fileWriter.close(); + so.p("生成完成"); +// return getEntity(tableName, property); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); +// return null; + } + + } + +} \ No newline at end of file diff --git a/dsUtils/src/main/java/com/dsideal/GenerateCode/AutoCreatedModelFile.java b/dsUtils/src/main/java/com/dsideal/GenerateCode/AutoCreatedModelFile.java new file mode 100644 index 00000000..20236428 --- /dev/null +++ b/dsUtils/src/main/java/com/dsideal/GenerateCode/AutoCreatedModelFile.java @@ -0,0 +1,306 @@ +package com.dsideal.GenerateCode; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Iterator; +import java.util.Map; + +import com.jfinal.core.JFinal; +import com.dsideal.GenerateCode.so; + +/*** + * 自动生成带setter与getter方法的Model + * @author 石啸天 + * + */ +public class AutoCreatedModelFile { + + public AutoCreatedModelFile(String tableName, Map property,String packageName) throws IOException{ + //-----------------------拼装文件夹名 + String[] pn=packageName.split("\\."); + StringBuffer file=new StringBuffer(); + String dir=JFinal.me().getServletContext().getRealPath("/"); + file.append(dir.substring(0, dir.length()-7)+"src"); + for(String p:pn) + { + file.append("/"); + file.append(p); + } + so.p(file.toString()); + //------------------------------------- + //---------------------创建文件 + String f=createdFile(file.toString()+"/"+tableName+"/",FileNameManager.upFirstName(tableName)+".java"); + + FileWriter fileWriter=new FileWriter(f); + fileWriter.write(getText(tableName,property,packageName)); + fileWriter.flush(); + fileWriter.close(); + } + /*** + * 创建文本内容 + * @param tableName + * @param property + * @return + */ + private String getText(String tableName, Map property,String packageName){ + String classname=FileNameManager.upFirstName(tableName); + + //参数对组 + String para=entrypara(property); + String ln = "\r\n"; + String tab="\t\t"; + StringBuffer sb = new StringBuffer(); + sb.append(ln +"package "+packageName+"."+tableName+";"+ln+ + "import com.jfinal.plugin.activerecord.Model;"+ln+ + "import com.jfinal.plugin.activerecord.TableMapping;"+ln+ + "import com.jfinal.plugin.activerecord.Db;"+ln+ + "import java.util.HashMap;"+ln+ + "import java.util.List;"+ln+ + "import java.util.Map;"+ln+ + inputPackage(property)+ + "/***"+ln+ + " * 自动生成的Model"+ln+ + " * @author 石啸天"+ln+ + " *"+ln+ + " */"+ln+ + "@SuppressWarnings(\"serial\")"+ln+ + "public class "+classname+" extends Model<"+classname+">{"+ln + ); + //空构造与有参构造 + sb.append(classTextStringLine(new String[]{ + "//--------------setter和getter---------------", + entryBean(classname,property), + "//-------------------------------------------", + "/***", + "*数据库操作实体", + "*/", + "public static final "+classname+" dao=new "+classname+"();", + "/**", + "* 表名", + "*/", + "public static final String tableName=\""+tableName+"\";", + "/**", + "* 表主键", + "*/", + "public static final String primaryKey=TableMapping.me().getTable(dao.getClass()).getPrimaryKey();", + "/***", + "* 空构造", + "*/", + "public "+classname+"(){}", + "/***", + "* 有参构造", + "*/", + "public "+classname+"(", + para, + "){", + "setData("+ln+tab+entryparas(property)+ln+tab+");", + "}", + "/***", + "*数据批量设置", + "*/", + "public "+classname+" setData(" +ln+ + "\t\t"+para + + "){", + setString(property), + "return this;", + "}", + "/***", + "* 按ID逆序查询全部数据", + "* 出现SQL注入漏洞", + "* @param pageNumber 页码", + "* @param pageSize 每页记录数", + "* @return", + "* @throws Exception ", + "*/", + "public Map paginate(int pageNumber, int pageSize,String para,Object value) throws Exception {", + classTextStringLine(new String[]{ + tab+"Object[] o=new Object[]{};", + tab+"StringBuffer sb=new StringBuffer();", + tab+"sb.append(\"from \"+tableName);", + tab+"if(value!=null&&value!=null&&value!=\"\")", + tab+"{", + tab+tab+"o= new Object[]{value};", + tab+tab+"sb.append(\" where \"+para+\"=?\");", + tab+"}", + tab+"sb.append(\" order by \"+primaryKey+\" DESC\");", + //----------------------", + //数据封装", + tab+"Long num=Db.queryLong(\"select count(1) \"+sb.toString(),o);", + tab+"List data = paginate(pageNumber, pageSize, \"select *\", sb.toString(),o).getList();", + tab+"Map m=new HashMap();", + tab+tab+"m.put(\"data\", data);", + tab+tab+"m.put(\"num\", num);", + tab+"return m;", + "}" + }) + + })); + sb.append(ln + "}"); + return sb.toString(); + } + /*** + * 创建文件 + * @param path + * @param filename + * @return + * @throws IOException + */ + private String createdFile(String path,String filename) throws IOException + { + //判断文件夹是否存在 + File dir=new File(path); + if(!dir.exists())dir.mkdirs(); + so.p(dir.getPath()); + //判断文件是否存在 + File f=new File(dir.getPath()+"/"+filename); + if(!f.exists()) + { + f.createNewFile(); + } + else + { + f.delete(); + f.createNewFile(); + } + + return f.getPath(); + } + /*** + * 文本格式化 + * @param s + * @return + */ + private String classTextStringLine(String[] s) + { + StringBuffer sb=new StringBuffer(); + for(String k:s) + { + sb.append("\t\t" +k+"\r\n"); + } + return sb.toString(); + } + /*** + * 构建类似Bean + * @param classname + * @param property + * @return + */ + @SuppressWarnings("rawtypes") + private String entryBean(String classname,Map property) + { + StringBuffer sb=new StringBuffer(); + sb.append("\r\n"); + /*//构建引用 + Iterator i=property.entrySet().iterator(); + while(i.hasNext()){//只遍历一次,速度快 + Map.Entry e=(Map.Entry)i.next(); + sb.append("\t\tpublic "+e.getValue().toString()+" " + + com.dsideal.GenerateCode.FileNameManager.CamelCase(e.getKey().toString().split("_"))+";" + "\r\n"); + }*/ + //构建setter和getter + Iterator k=property.entrySet().iterator(); + while(k.hasNext()){//只遍历一次,速度快 + Map.Entry e=(Map.Entry)k.next(); + String propetyname=FileNameManager.CamelCase(e.getKey().toString().split("_")); + //setter + sb.append("\t\tpublic "+classname+" set" + + FileNameManager.upFirstNameNoLowerCase(propetyname) + +"("+e.getValue()+" "+propetyname+"){" +"\r\n"+ + classTextStringLine( + new String[]{ +// tab"\t\t" +"this." +propetyname+"="+propetyname+ ";", + "\t\t" +"set(\""+e.getKey()+"\","+propetyname+");", + "\t\t" +"return this;", + "\t\t" +"}" + } + ) + + "\r\n"); + sb.append("\t\tpublic "+e.getValue()+" get" + + FileNameManager.upFirstNameNoLowerCase(propetyname) + +"(){" +"\r\n"+ + classTextStringLine( + new String[]{ + "\t\t" +"return get(\""+e.getKey()+"\");", + "\t\t" +"}" + } + ) + + "\r\n"); + } + return sb.toString(); + } + /*** + * 构建传参的字符串 + * @param property + * @return + */ + @SuppressWarnings("rawtypes") + private String entrypara(Map property) + { + StringBuffer sb=new StringBuffer(); + //构建引用 + sb.append("\r\n"); + Iterator i=property.entrySet().iterator(); + while(i.hasNext()){//只遍历一次,速度快 + Map.Entry e=(Map.Entry)i.next(); + String propetyname=FileNameManager.CamelCase(e.getKey().toString().split("_")); + sb.append("\t\t\t\t"+e.getValue().toString()+" " + + propetyname+","+"\r\n"); + } + return sb.substring(4, sb.lastIndexOf(",")); + } + @SuppressWarnings("rawtypes") + private String entryparas(Map property) + { + StringBuffer sb=new StringBuffer(); + //构建引用 + sb.append("\r\n"); + Iterator i=property.entrySet().iterator(); + while(i.hasNext()){//只遍历一次,速度快 + Map.Entry e=(Map.Entry)i.next(); + String propetyname=FileNameManager.CamelCase(e.getKey().toString().split("_")); + sb.append("\t\t\t\t"+propetyname+","+"\r\n"); + } + return sb.substring(4, sb.lastIndexOf(",")); + } + /*** + * 批量set + * @param property + * @return + */ + @SuppressWarnings("rawtypes") + private String setString(Map property) + { + StringBuffer sb=new StringBuffer(); + //构建引用 + sb.append("\r\n"); + Iterator i=property.entrySet().iterator(); + while(i.hasNext()){//只遍历一次,速度快 + Map.Entry e=(Map.Entry)i.next(); + String propetyname=FileNameManager.CamelCase(e.getKey().toString().split("_")); + sb.append("\t\t\t\tset(\""+e.getKey().toString()+"\","+ propetyname+");\r\n"); + } + return sb.substring(4, sb.length()-2); + } + @SuppressWarnings("rawtypes") + private String inputPackage(Map property) + { + StringBuffer sb=new StringBuffer(); + //构建引用 + sb.append("\r\n"); + Iterator i=property.entrySet().iterator(); + while(i.hasNext()){//只遍历一次,速度快 + Map.Entry e=(Map.Entry)i.next(); + String type=e.getValue().toString(); + String packages=null; + if(type.equals("BigInteger")){packages="import java.math.BigIntege;\r\nr";} + else if(type.equals("BigDecimal")){packages="import java.math.BigDecimal;\r\n";} + else if(type.equals("Date")){packages="import java.util.Date;\r\n";} + else if(type.equals("Timestamp")){packages="import java.sql.Timestamp;\r\n";} + else if(type.equals("Time")){packages="import java.sql.Time;\r\n";} + else{ packages="";} + sb.append(packages); + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/dsUtils/src/main/java/com/dsideal/GenerateCode/DataBeasTypeToJavaType.java b/dsUtils/src/main/java/com/dsideal/GenerateCode/DataBeasTypeToJavaType.java new file mode 100644 index 00000000..5dcb332e --- /dev/null +++ b/dsUtils/src/main/java/com/dsideal/GenerateCode/DataBeasTypeToJavaType.java @@ -0,0 +1,28 @@ +package com.dsideal.GenerateCode; + +public class DataBeasTypeToJavaType { + + public String get(String type) + { + if(type.equals("char")){return "String";} + else if(type.equals("varchar")){return "String";} + else if(type.equals("blob")){return "Byte[]";} + else if(type.equals("text")){return "String";} + else if(type.equals("int")){return "Integer";} + else if(type.equals("tinyint")){return "Integer";} + else if(type.equals("smallint")){return "Integer";} + else if(type.equals("mediumint")){return "Integer";} + else if(type.equals("bit")){return "Boolean";} + else if(type.equals("bigint")){return "BigInteger";} + else if(type.equals("decimal")){return "BigDecimal";} + else if(type.equals("date")){return "Date";} + else if(type.equals("datetime")){return "Timestamp";} + else if(type.equals("timestamp")){return "Timestamp";} + else if(type.equals("time")){return "Time";} + else if(type.equals("year")){return "Date";} + else if(type.equals("float")){return "Float";} + else if(type.equals("double")){return "Double";} + else if(type.equals("integer")){return "Long";} + else{return null;} + } +} diff --git a/dsUtils/src/main/java/com/dsideal/GenerateCode/FileNameManager.java b/dsUtils/src/main/java/com/dsideal/GenerateCode/FileNameManager.java new file mode 100644 index 00000000..7129cd42 --- /dev/null +++ b/dsUtils/src/main/java/com/dsideal/GenerateCode/FileNameManager.java @@ -0,0 +1,79 @@ +package com.dsideal.GenerateCode; + +public class FileNameManager { + + /*** + * + * 首字母大写处理 + * 注意:先所有字符小写化 + * + */ + public static String upFirstName(String name) + { + String s=null; + if(name!=null) + { + s=name.toLowerCase(); + String first=""+s.charAt(0); + first=first.toUpperCase(); + s=first+s.substring(1, s.length()); + } + return s; + } + /*** + * + * 首字母大写处理 + * + */ + public static String upFirstNameNoLowerCase(String name) + { + String s=null; + if(name!=null) + { + s=name; + String first=""+s.charAt(0); + first=first.toUpperCase(); + s=first+s.substring(1, s.length()); + } + return s; + } + /*** + * + * 字符数组驼峰命名法处理 + * + */ + public static String CamelCase(String n[]) + { + String s=null; + if(n!=null&&n.length>0) + { + StringBuffer b=new StringBuffer(); + b.append(n[0].toLowerCase()); + for(int i=1;i0) + { + StringBuffer b=new StringBuffer(); + for(int i=0;i<`|Nw>w2!y0-bG$-U9EFx&TkGfxMKX^X_20nua2kh#nM$pJc^|;6$9O&N7xo+{2Eh= zLrXGqijjgHoM3kF5ET+vvJm;2XB}2BRW0b%Cp`9v&0SY&8j}1>L;)J`84Qu zYe>t>oO$y0+qSG->HY0->gMdJ`^@u#?v%#vl+ZJHu=UPIhdje$!t0FElHSGEHQckd zPUNw^cvv&}lk@?}wlmB<26iU%%lRHGzbGyIHcUhXxsFi-fvEn zT`GFY!=%#IBG7)ftXZDn)%=?o^=x@_mUzzMEApE6z0&^AkIH5v)#W`B`SaAA>}BRk zPWDysDLlw>KvFH8$3yh+;`H_cc@_l;%V#O;Di6;)o0hOG{L?W|J4JW^<8a+lH>t5YLCZd@im{Xtz9WC|+oClv#t%tn>=>ez5Cd${*U?gYcs#q({_7l zJ025Wrj=yECn(eR#?Lh3=oy}+VH4fjzAe<6u&Iah6wAv68`!5OR4)1^)3x*FEvZr_ z+dHODPMuP|I@?1#iTxRqS!vFFwOiVp>{)pS-s!6D{CfYH$=(AO0=E8q<8}4+()u|oEs$@i{aiM~r7KwO`Kmv;JOW-pr#-Fn7piQlxomh! zY~oj)bKBnDd3c-k^RgWW9$(lUR}&vsv-jtRZ|9GmpWXld?yQ~u>u+vrEVg2lUuofg zefI0yyvH<+!=zZYFJksOczemF*%!*4cumvVx89!JyX}2FBO>X63X@Y`*IJqblbjh4 z8xo)N3X1XzQj1D5Q;WTIv`+eX`{;f2+32gur+e~@=Ch|>`ls}D8MsuQKYz7UBz@Tu zwPzoSrY;o|O@H?MrqnCR58&dFkx7IZcUcZ}3J?e|ymbW8NF_T+8}70lq!<%kO_A!tQ<#J zi>?_|l0yK4X1T*qw?sANYN6pP;=L^%&K5E2R4N_v=)OB&|^4MYwQq;ek; zHV{Lwm4OIDP6A6tJl=!33R)r}n~N=hBg}PSCE8p>au4uk1s2i_3|v6C1L&|*KtmW9 E08k9j2LJ#7 diff --git a/dsUtils/target/maven-archiver/pom.properties b/dsUtils/target/maven-archiver/pom.properties deleted file mode 100644 index b9dee4d1..00000000 --- a/dsUtils/target/maven-archiver/pom.properties +++ /dev/null @@ -1,3 +0,0 @@ -artifactId=dsUtils -groupId=com.dsideal -version=1.0 diff --git a/dsUtils/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/dsUtils/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 6bc71962..e69de29b 100644 --- a/dsUtils/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/dsUtils/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1 +0,0 @@ -com\dsideal\dsKit.class diff --git a/dsUtils/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/dsUtils/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 9ce2c3f3..ce451ce4 100644 --- a/dsUtils/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/dsUtils/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1 +1,5 @@ +D:\dsWork\dsProject\dsUtils\src\main\java\com\dsideal\GenerateCode\AutoCreatedEntityName.java +D:\dsWork\dsProject\dsUtils\src\main\java\com\dsideal\GenerateCode\FileNameManager.java D:\dsWork\dsProject\dsUtils\src\main\java\com\dsideal\dsKit.java +D:\dsWork\dsProject\dsUtils\src\main\java\com\dsideal\GenerateCode\AutoCreatedModelFile.java +D:\dsWork\dsProject\dsUtils\src\main\java\com\dsideal\GenerateCode\DataBeasTypeToJavaType.java