1. 程式人生 > >將美化(格式化)的sql語句轉成Java中的StringBuffer拼接的一行行字串/反過來

將美化(格式化)的sql語句轉成Java中的StringBuffer拼接的一行行字串/反過來

1. 需求背景

現在所在的專案,dao層是用jdbcTemplate封裝的, 所有都是自己寫sql語句, 一般是在NavicatPremium中寫好sql語句, 再自己一行一行復制到IDEA中, 一旦需要連線多個表進行查詢, sql語句比較多的時候,, 容易出錯而且十分麻煩
給大家感受一下:

這裡寫圖片描述

一行一行復制到IDEA中:

這裡寫圖片描述

是一個十分沒有技術含量並且很容易出錯的活. 於是我就想到寫一個工具類來解決這個問題. 並且可以將–後面註釋的內容過濾掉,避免sql出錯

2. 工具類, BufferReader和BufferWriter

import java.io.BufferedReader;
import
java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.text.SimpleDateFormat; import java.util.Date; public class Sql2JavaUtil { //如果要轉成java字串, 將格式化的sql檔案複製貼上在E盤的sql.txt中 private static String sqlFile = "E:/sql.txt"; //如果要將字串轉成sql語句, 將所有"sb.append(" ... ")包裹的sql語句都複製到java.txt中"
private static String javaFile = "E:/java.txt"; public static void main(String[] args)throws Exception { //true為不覆蓋之前的檔案,false為覆蓋 // sql2Java("sb",sqlFile,javaFile,true); sql2Java("sql",sqlFile,javaFile,false); // java2Sql("sb",javaFile,sqlFile,true); // java2Sql("sql",javaFile,sqlFile,false);
} /** * 將格式化後的sql檔案,或普通的txt檔案,讀取每一行sql語句,用"sb.append("")來包裹" * @param var stringbuffer的變數 * @param sqlPath sql檔案的路徑 * @param javaFile java檔案的路徑 * @param isAppend 是否在原檔案後拼接 * @throws Exception */ public static void sql2Java(String var,String sqlPath,String javaFile,boolean isAppend)throws Exception{ BufferedReader br = new BufferedReader(new FileReader(sqlPath)); BufferedWriter bw = new BufferedWriter(new FileWriter(javaFile,isAppend)); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = format.format(new Date()); String str = ""; if (isAppend){ bw.newLine(); bw.write("--------------------"+date+"-------------------------"); bw.newLine(); } while((str = br.readLine()) != null) { if (!str.trim().equals("")){ str = str.trim(); int i = -1; //去掉註釋 if ((i = str.indexOf("-- ")) != -1){ str = str.substring(0,i); } if (!str.trim().equals("")){ bw.write(" "+var+".append(\" " + str.trim() + " \");"); bw.newLine(); } } } bw.close(); br.close(); System.out.println("java檔案輸出ok"); } /** * 將java程式碼中被"sb.append("")來包裹的sql檔案,還原成原來的sql * @param var stringbuffer的變數名 * @param javaPath java檔案的路徑 * @param sqlPath sql檔案的路徑 * @param isAppend 是否在原檔案後拼接 * @throws Exception */ public static void java2Sql(String var,String javaPath,String sqlPath,boolean isAppend)throws Exception{ BufferedReader br = new BufferedReader(new FileReader(javaPath)); BufferedWriter bw = new BufferedWriter(new FileWriter(sqlPath)); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = format.format(new Date()); String str = ""; if (isAppend){ bw.newLine(); bw.write("--------------------"+date+"-------------------------"); bw.newLine(); } while((str = br.readLine()) != null) { bw.write(str.trim().replace(var+".append(\"","").replace("\");","")); bw.newLine(); } bw.flush(); bw.close(); br.close(); System.out.println("sql檔案輸出ok"); } }

這裡的話我是把檔案放在E:/根目錄 ,StringBuffer的變數名是sql,大家可以自己根據自己的情況更改

這裡寫圖片描述
效果如下:
這裡寫圖片描述