读取TXT中sql自动生成相关配置文件

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

public class ConvertProcess {

    static String bmx4p1 = "";
    static String bmx4p2 = "";
    static String bmx5 = "";
    /**
     * @param args
     * @throws IOException
     */
    private static void buildSql(String lastTable,String fieldString,String valueMarkString) {
        fieldString = fieldString.substring(0, fieldString.length()-1);
        bmx4p1 = "<insert id=\"insert_"+lastTable+"\" parameterType=\"HybridDataModel\">\n"+
        "\tinsert into "+lastTable+ "_tmp (mpoint_id,freeze_time,read_time,";
        bmx4p1 += fieldString+")\n";
        bmx4p1 += "\tvalues (#{pointId}, #{dataTime},#{readMeterTime}"+valueMarkString+")\n"+
        "</insert>\n";
        
        String[] fieldArray = fieldString.split(",");
        String[] valueMarkArray = valueMarkString.substring(3).split(",#");
        
        bmx5 = "<insert id=\"insert_"+lastTable+"\" parameterType=\"HybridDataModel\">\n"+
        "\treplace into "+lastTable+ " (mpoint_id,freeze_time,read_time,";
        bmx5 += fieldString+")\n";
        bmx5 += "\tselect * from (\n"+
            "\tselect\n"+
            "\tifnull(#{pointId},mpoint_id),\n"+
            "\tifnull(#{dataTime},freeze_time),\n"+
            "\tifnull(#{readMeterTime},read_time),\n";
        for (int i = 0; i < valueMarkArray.length; i++) {
            bmx5 += "\tifnull(#"+valueMarkArray[i]+","+fieldArray[i]+"),\n";
        }
        bmx5 += "\tfrom "+lastTable+"\n"+
            "\twhere mpoint_id = #{pointId} and freeze_time = #{dataTime}\n"+
            "\tunion\n"+
            "\tselect\n"+
            "\t#{pointId},\n"+
            "\t#{dataTime},\n"+
            "\t#{readMeterTime},\n";
        for (int i = 0; i < valueMarkArray.length; i++) {
            bmx5 += "\t#"+valueMarkArray[i]+",\n";
        }
        bmx5 += "\tfrom DUAL\n"+
            "\t) S limit 1\n"+
            "</insert>\n\n";
        
        bmx4p2 = "<insert id=\"merge_"+lastTable+"\">\n"+
        "\tmerge into "+lastTable+" t using (select mpoint_id,freeze_time";
        for (String field : fieldArray) {
            bmx4p2 += ",max(" + field +") as "+ field;
        }
        bmx4p2 += "from "+ lastTable +"_tmp group by mpoint_id,freeze_time) s on (t.mpoint_id=s.mpoint_id and t.freeze_time=s.freeze_time )\n";
        bmx4p2 += "\twhen matched then update set ";
        
        for (String field : fieldArray) {
            bmx4p2 += "t."+field+" = nvl(s."+field+",t."+field+"),";
        }
        bmx4p2 = bmx4p2.substring(0, bmx4p2.length()-1) + "\n";
        
        bmx4p2 += "\twhen not matched then insert (t.mpoint_id,t.freeze_time,t.read_time";
        for (String field : fieldArray) {
            bmx4p2 += ",t."+field;
        }
        bmx4p2 += ") values (s.mpoint_id,s.freeze_time,s.read_time";
        for (String field : fieldArray) {
            bmx4p2 += ",s."+field;
        }
        bmx4p2 += ")\n</insert>\n\n";
    }
    
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        File f1 = new File("C:\\Users\\xs\\Desktop","1.txt");
        File f2 = new File("C:\\Users\\xs\\Desktop","2.txt");
        File f3 = new File("C:\\Users\\xs\\Desktop","3.txt");
        File f4 = new File("C:\\Users\\xs\\Desktop","4.txt");
        File f5 = new File("C:\\Users\\xs\\Desktop","5.txt");
        if(!f1.exists())   
        {   
            try {   
                f1.createNewFile();   
            } catch (IOException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            }   
        }else {
            f1.delete();
            f1.createNewFile();
        }   
        if(!f2.exists())   
        {   
            try {   
                f2.createNewFile();   
            } catch (IOException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            }   
        }else {
            f2.delete();
            f2.createNewFile();
        }     
        if(!f3.exists())   
        {   
            try {   
                f3.createNewFile();   
            } catch (IOException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            }   
        }else {
            f3.delete();
            f3.createNewFile();
        }
        if(!f4.exists())   
        {   
            try {   
                f4.createNewFile();   
            } catch (IOException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            }   
        }else {
            f4.delete();
            f4.createNewFile();
        }
        if(!f5.exists())   
        {   
            try {   
                f5.createNewFile();   
            } catch (IOException e) {   
                // TODO Auto-generated catch block   
                e.printStackTrace();   
            }   
        }else {
            f5.delete();
            f5.createNewFile();
        }
        
        BufferedReader bReader = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\xs\\Desktop\\insert.txt")));
        String dataLineStr = null;
        List<String> dataItemIdList = new ArrayList<String>();
        List<String> dataItemTableList = new ArrayList<String>();
        List<String> dataItemFieldList = new ArrayList<String>();
        while ((dataLineStr = bReader.readLine()) != null) {
            //System.out.println(dataLineStr);
            if (!dataLineStr.equals("")) {
                String subLineString = dataLineStr.substring(dataLineStr.indexOf("("), dataLineStr.indexOf(")"));
                String[] ddList = subLineString.split(",");
                dataItemIdList.add(ddList[1].trim());
                dataItemTableList.add(ddList[2].trim());
                dataItemFieldList.add(ddList[3].trim());
            }
        }
        BufferedWriter bWriter1 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f1)));
        BufferedWriter bWriter2 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f2)));
        BufferedWriter bWriter3 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f3)));
        BufferedWriter bWriter4 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f4)));
        BufferedWriter bWriter5 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f5)));
//        for (String string : dataItemIdList) {
//            //System.out.println(Integer.parseInt(string.substring(string.length() - 2)));
//            
//        }
        int lastTableId = 0;
        int indexV = 1;
        int indexS = 1;
        int indexT = 1;
        String fieldString = "";
        String valueMarkString = "";
        
        String lastTable = "";
        for (int i = 0; i < dataItemIdList.size(); i++) {
            
            String dataItemIdStr = dataItemIdList.get(i);
            int tableId = Integer.parseInt(dataItemIdStr.substring(0,dataItemIdStr.length() - 2));
            if (lastTableId != tableId) {
                String bms1 = "\tpublic void insert_"+dataItemTableList.get(i).replace("'", "").toLowerCase()+"(BaseDataModel data);\n"+
                "\tpublic void merge_"+dataItemTableList.get(i).replace("'", "").toLowerCase()+"();\n\n";
                bWriter1.write(bms1);
                String bms2 = "\tpublic void insert_"+dataItemTableList.get(i).replace("'", "").toLowerCase()+"(BaseDataModel data);\n\n";
                bWriter2.write(bms2);
                
                if (!lastTable.equals("")) {                    
                    buildSql(lastTable,fieldString,valueMarkString);
                    bWriter4.write(bmx4p1+bmx4p2);
                    bWriter5.write(bmx5);
                    fieldString="";
                    valueMarkString="";
                }
                
                lastTableId = tableId;
                indexV = 1;
                indexS = 1;
                indexT = 1;
            }
            
            lastTable = dataItemTableList.get(i).replace("'", "").toLowerCase();

            fieldString+=dataItemFieldList.get(i).replace("'", "").toLowerCase()+",";
            
            String dITDM = "\t<void method=\"put\">\n"+
            "\t\t<long>"+dataItemIdStr+"</long>\t<!--"+dataItemFieldList.get(i).toLowerCase()+"-->\n"+
            "\t\t<object class=\"com.linyang.db.batch.model.HybridDataModel\"> \n"+
            "\t\t<void property=\"methodName\">\n"+
            "\t\t\t<string>";
            
            String field = dataItemFieldList.get(i).toLowerCase();
            if (field.indexOf("_time")!=-1) {
                dITDM += "setTime" + indexT;
                valueMarkString += " ,#{time" + indexT +",jdbcType=TIMESTAMP}";
                indexT++;
            }else if (field.indexOf("_status")!=-1) {
                dITDM += "setString" + indexS;
                valueMarkString += " ,#{string" + indexS +",jdbcType=VARCHAR}";
                indexS++;
            }else {
                dITDM += "setValue" + indexV;
                valueMarkString += " ,#{value" + indexV +",jdbcType=DOUBLE}";
                indexV++;
            }
            dITDM += "</string>\n"+
            "\t\t</void>\n"+
            "\t\t<void property=\"mapperName\">\n"+
            "\t\t\t<string>com.linyang.db.batch.mapper.BatchMapper</string>\n"+
            "\t\t</void>\n"+
            "\t\t<void property=\"tableName\">\n"+
            "\t\t\t<string>"+dataItemTableList.get(i).replace("'", "").toLowerCase()+"</string>\n"+
            "\t\t</void>\n"+
            "\t\t</object> \n"+
            "\t</void>\n";
            bWriter3.write(dITDM);
        }
        buildSql(lastTable,fieldString,valueMarkString);
        bWriter4.write(bmx4p1+bmx4p2);
        bWriter5.write(bmx5);
        
        bWriter1.close();
        bWriter2.close();
        bWriter3.close();
        bWriter4.close();
        bWriter5.close();
    }

}

posted on 2016-03-09 15:28  xiaopangzhi  阅读(177)  评论(0)    收藏  举报