最近在工作中遇到表中有100多个字段,要写公共的查询列实在头大,因此突然想到可以从生成的sql执行脚本中,把该表中的列截取出来如这样的数据:
很有规律对不对,然后上代码
private static void autoCreateBaseColumn(String filePath,String columnFix) {
//首先获取到文件 我是保存到本地的一个txt文件,每次拿时方便,另一个参数是要加的前缀,一般为表的简写
String strFile = filePath;
//把文件内容用流的形式拿出来放到String变量中
StringBuffer sb = new StringBuffer();
try {
BufferedReader reader = new BufferedReader(new FileReader(strFile));
String str = "" ;
while((str = reader.readLine())!=null) { //按行获取
String string = str.trim();
String[] split = string.split(" ");
sb.append(columnFix+split[0]+",");
sb.append("\r\n");
}
} catch (IOException e) {
e.printStackTrace();
}
//然后对string进行操作
//一行输出
//String substring = sb.toString().substring(0,sb.length()-1);
//分行输出
String substring = sb.toString().substring(0,sb.length()-3);
System.out.println(substring);
}
最后,在控制台展出
确实很方便,而且通过这样启发,resultMap的列也可以这样生成,代码如下:
private static void autoCreateResult(String filePath) {
try {
BufferedReader reader = new BufferedReader(new FileReader(filePath));
String str = "";
StringBuffer sb = new StringBuffer();
while((str = reader.readLine())!=null) {
str = str.trim();
String[] split = str.split(" ");
sb.append("<result column=");
sb.append("\""+split[0]+"\" "); //还是通过空格分隔
String lowerCase = split[0].toLowerCase(); //先把所有的字段转为小写
String[] split2 = lowerCase.split("_");
for (int i= 0;i<split2.length;i++) {
if(i == 0) {
lowerCase = split2[i];
}else {
lowerCase = lowerCase+ split2[i].substring(0, 1).toUpperCase()+split2[i].substring(1); //将_后的第一个字母大写
}
}
sb.append("property=\"");
sb.append(lowerCase+"\" ");
sb.append(" jdbcType=\"");
String type = "" ;
for(int i = 1;i<split.length;i++) {
if(!split[i].trim().startsWith(" ")) { //获取jdbc类型,starWith里要打个空格,要不一直进不去判断里,系统大牛可以解释一下
String string = split[i];
if(string.startsWith("VARCHAR")) {
type = "VARCHAR";
}else if(string.startsWith("NUMBER")) {
type = "DECIMAL";
}else if(string.startsWith("DATE")) {
type = "DATE";
}
}
}
sb.append(type+"\"");
sb.append(" />");
sb.append("\r\n");
}
System.out.println(sb.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
打印出如下: