最近在工作中遇到表中有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();
}
}
列印出如下: