JAVA-自動生成代碼-MySQL


myBatis+Spring+SpringMVC這種框架格式即可使用。當然SpringBoot也是可以的,親測有效,主要根據MySQL數據庫還有表字段,自動生成常用CRUD代碼,用了之后才知道有多贊:)
使用之前先定好基礎BaseDao<T extends BaseEntity>和接口IBaseService<T extends BaseEntity>,代碼即可按照既定好的方法生成。
代碼片段以SpringBoot框架為基礎;
BaseDao<T extends BaseEntity>:

package com.test.base.dao;



import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import com.test.base.entity.BaseEntity;
import com.test.base.page.PageInfo;
import com.test.base.page.Pager;

public abstract class BaseDao<T extends BaseEntity> {

    @Autowired
    @Qualifier("readSqlSession")
    protected SqlSessionTemplate readSqlSession;

    @Autowired
    @Qualifier("writeSqlSession")
    protected SqlSessionTemplate writeSqlSession;
    
    private String className;
    
    private String directPackageName;
    
    private Class<T> cls;
    
    /**
     * 實例化過程中根據泛型獲取必要參數,從而對應命名空間
     */
    @SuppressWarnings("unchecked")
    public BaseDao() {
        Type entity = getClass().getGenericSuperclass();
        if (ParameterizedType.class.isAssignableFrom(entity.getClass())) {
            this.cls = ((Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
            this.className = this.cls.getSimpleName();
            String fullPackageName = this.cls.getPackage().getName();
            if(fullPackageName.lastIndexOf(".")==-1){
                this.directPackageName = fullPackageName;
            }else{
                this.directPackageName = fullPackageName.substring(fullPackageName.lastIndexOf(".")+1);
            }
        }
    }
    
    /**
     * 指向讀取數據
     * @return
     */
    public String getReadSql(){
        return "read."+this.directPackageName+"."+this.className.toLowerCase()+".";
    };

    /**
     * 指向修改數據
     * @return
     */
    public String getWriteSql(){
        return "write."+this.directPackageName+"."+this.className.toLowerCase()+".";
    };
    
    /**
     * 不得不說,這也是一個設計失誤,實際上根本不需要整出一個對面傳遞進去,好多代碼已經沿用就不再修改了
     * @param entity
     * @return
     */
    public T queryById(String id){
        Map<String,String> paramMap = new HashMap<String,String>();
        paramMap.put("id", id);
        return readSqlSession.selectOne(getReadSql()+"queryById",paramMap);
    }

    /**
     * 只是一個簡單的查詢而已,所以無需限制參數類型,這是和分頁查詢比較明顯的區別的地方
     * @param entity
     * @return
     */
    public T selectOne(Object entity){
        return readSqlSession.selectOne(getReadSql()+"selectOne",entity);
    }
    
    /**
     * 只是一個簡單的查詢而已,所以無需限制參數類型,這是和分頁查詢比較明顯的區別的地方
     * @param entity
     * @param mapId,自定義修改,如果只是簡單的修改查詢語句,可以使用該方法,原則上不建議修改通用語句
     * @return
     */
    public T selectOne(Object entity,String mapId){
        return readSqlSession.selectOne(getReadSql()+"selectOne"+mapId,entity);
    }


    /**
     * 這里的參數類型只所以設置為BaseEntity,實際上是因為分頁參數的需要,如果只是查詢使用,則不必要限制類型
     * @param entity
     * @return
     */
    public int queryByCount(BaseEntity entity){
        return readSqlSession.selectOne(getReadSql()+"queryByCount",entity);
    }
    
    /**
     * 這里的參數類型只所以設置為BaseEntity,實際上是因為分頁參數的需要,如果只是查詢使用,則不必要限制類型
     * @param entity
     * @param mapId,自定義修改,如果只是簡單的修改查詢語句,可以使用該方法,原則上不建議修改通用語句
     * @return
     */
    public int queryByCount(BaseEntity entity,String mapId){
        return readSqlSession.selectOne(getReadSql()+"queryByCount"+mapId,entity);
    }
    
    /**
     * 只是一個簡單的查詢而已,所以無需限制參數類型,這是和分頁查詢比較明顯的區別的地方
     * @param entity
     * @return
     */
    public List<T> selectList(Object entity) {
        return   readSqlSession.selectList(getReadSql()+"selectList",entity);
    }
    
    /**
     * 只是一個簡單的查詢而已,所以無需限制參數類型,這是和分頁查詢比較明顯的區別的地方
     * @param entity
     * @param mapId,自定義修改,如果只是簡單的修改查詢語句,可以使用該方法,原則上不建議修改通用語句
     * @return
     */
    public List<T> selectList(Object entity,String mapId) {
        return   readSqlSession.selectList(getReadSql()+"selectList"+mapId,entity);
    }
    
    /**
     * 這里的參數類型只所以設置為BaseEntity,實際上是因為分頁參數的需要,如果只是查詢使用,則不必要限制類型
     * @param entity
     * @return
     */
    public PageInfo<T> queryByList(BaseEntity entity) {
        Integer rowCount = queryByCount(entity);
        Pager pager = entity.getPager();
        pager.setRowCount(rowCount);
        List<T> dataList = readSqlSession.selectList(getReadSql()+"queryByList",entity);
        return new PageInfo<T>(dataList,pager);
    }
    
    /**
     * 這里的參數類型只所以設置為BaseEntity,實際上是因為分頁參數的需要,如果只是查詢使用,則不必要限制類型
     * @param entity
     * @param mapId,自定義修改,如果只是簡單的修改查詢語句,可以使用該方法,原則上不建議修改通用語句
     * @return
     */
    public PageInfo<T> queryByList(BaseEntity entity,String mapId) {
        Integer rowCount = queryByCount(entity,mapId);
        Pager pager = entity.getPager();
        pager.setRowCount(rowCount);
        List<T> dataList = readSqlSession.selectList(getReadSql()+"queryByList"+mapId,entity);
        return new PageInfo<T>(dataList,pager);
    }
    
    /**
     * 自定義查詢集合
     * @param entity
     * @param customMethod
     * @return
     */
    public <E,F> List<E> selectListCustom(F entity,String customMethod){
        return readSqlSession.selectList(getReadSql()+customMethod.trim(), entity);
    }
    
    /**
     * 自定義查詢單體
     * @param entity
     * @param customMethod
     * @return
     */
    @SuppressWarnings("unchecked")
    public <E,F> E selectOneCustom(F entity,String customMethod){
        return (E) readSqlSession.selectOne(getReadSql()+customMethod.trim(),entity);
    }
    
    
    /**
     * 插入對象
     * @param object
     */
    public void add(T object) {
        writeSqlSession.insert(getWriteSql()+"add",object);
    }
    
    /**
     * 修改數據,修改實體類中不為null的字段數據,用於避免0倍識別為空字符串
     * @param object
     */
    public void update(T object) {
        writeSqlSession.update(getWriteSql()+"update",object);
    }
    
    /**
     * 修改數據,只修改實體類中不為空的字段數據
     * @param object
     */
    public void updateBySelective(T object) {
        writeSqlSession.update(getWriteSql()+"updateBySelective",object);
    }

    /**
     * 根據ID徹底刪除數據,不得不說,這也是一個設計失誤,實際上根本不需要整出一個對面傳遞進去,好多代碼已經沿用就不再修改了
     * @param id
     */
    public void deleteById(String id){
        Map<String,String> paramMap = new HashMap<String,String>();
        paramMap.put("id", id);
        writeSqlSession.delete(getWriteSql()+"deleteById",paramMap);
    }
    
    /**
     * 根據條件徹底刪除數據
     * @param entity
     */
    public void deleteBySelective(Object entity){
        writeSqlSession.delete(getWriteSql()+"deleteBySelective",entity);
    }
    
    /**
     * 根據ID邏輯刪除數據,不得不說,這也是一個設計失誤,實際上根本不需要整出一個對面傳遞進去,好多代碼已經沿用就不再修改了
     * @param id
     */
    public void deleteLogicById(String id){
        Map<String,String> paramMap = new HashMap<String,String>();
        paramMap.put("id", id);
        writeSqlSession.delete(getWriteSql()+"deleteLogicById",paramMap);
    }
    
    /**
     * 根據條件邏輯刪除數據
     * @param entity
     */
    public void deleteLogicBySelective(Object entity){
        writeSqlSession.delete(getWriteSql()+"deleteLogicBySelective",entity);
    }
    
    /**
     * 自定義插入操作
     * @param entity
     * @param customMethod
     */
    public <E> void addEntityCustom(E entity,String customMethod){
        writeSqlSession.insert(getWriteSql()+customMethod.trim(),entity);
    }
    
    /**
     * 自定義更新操作
     * @param entity
     * @param customMethod
     */
    public <E> void updateEntityCustom(E entity,String customMethod){
        writeSqlSession.update(getWriteSql()+customMethod.trim(),entity);
    }
    
    /**
     * 自定義刪除操作
     * @param entity
     * @param customMethod
     */
    public <E> void deleteEntityCustom(E entity,String customMethod){
        writeSqlSession.delete(getWriteSql()+customMethod.trim(),entity);
    }
}

 

IBaseService<T extends BaseEntity>:

package com.test.inters.base;

import java.util.List;

import com.test.base.entity.BaseEntity;
import com.test.base.page.PageInfo;

/**
 * Created by Administrator on 2017/3/20.
 */
public interface IBaseService<T extends BaseEntity> {

    public T queryById(String id);

    public T selectOne(Object entity);

    public int queryByCount(BaseEntity entity);

    public List<T> selectList(Object entity);

    public PageInfo<T> queryByList(BaseEntity entity);

    public void add(T t) throws Exception;

    public void update(T t) throws Exception;

    public void updateBySelective(T t) throws Exception;

    public void deleteById(String... ids) throws Exception;

    public void deleteBySelective(Object entity) throws Exception;

    public void deleteLogicById(String... ids) throws Exception;

    public void deleteLogicBySelective(Object entity) throws Exception;
}

 

生成代碼的工具類,主要原理為讀取數據庫表字段,按照表生成相關Entity,Service,Dao,Mapper

package com.test.core;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.dom4j.io.XMLWriter;

/**
 * 自動生成表的實體類 需要修改 packagePath 實體類包名 authorName 作成者姓名 tablename 表名 category
 * 實體類名(自動首字母大寫) 改好后在控制台運行即可,看到success后,右鍵刷新實體類目錄,即可看到,增加serialVersionUID后即可使用
 */
public class MysqlUtil {

    // 數據庫連接
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/db_test";

    private static final String NAME = "root";

    private static final String PASS = "root";

    private static final String DRIVER = "com.mysql.jdbc.Driver";

    // 基本參數設置
    private String authorName = "zhangjy";// 作者名字

    private String dbname = "configure";// 表名

    private String tablename = "tb_app_version";// 表名

    private String basePath = "com.test";// 指定實體生成所在包的路徑

    private boolean is_modify = false;// 是否修改操作(當為true時開啟修改模式,如果為false,則is_add,prevFieldName,modifyFieldArr三個值被忽略)

    private boolean is_add = false;// 添加字段還是刪除字段(為true時添加modifyFieldArr中指定的字段對應的相關SQL,為true時刪除modifyFieldArr中指定的字段對應的相關SQL)

    private String prevFieldName = "app_version";// 需要添加在哪個字段之后(如果is_add為false,該值被忽略)

    private String[] modifyFieldArr = { "app_version", "app_type" };// 需要修改的字段數組(當is_add為true時為添加,當is_add為false時為刪除)

    // 一些通用設置(這些字段的默認值一般不用改變,除非表的設計比較特殊)
    // 是否去除通用字段(如果包含通用字段則為true,否則為false),通用字段是指create_by,create_date,update_by,update_date,remarks,del_flag
    private boolean is_creater = true;

    // 表中是否包含id
    private boolean is_clude_id = true;

    // 是否使用簡短包名(簡短包名往往體現出數據表的功能)
    private boolean is_use_short_package_path = true;

    // 是否使用簡短類名(簡短類型不包含簡短包名,但是如果某些類為單個詞,或者容易和系統類重名,則可以設置為false,即包含簡短包名)
    private boolean is_use_short_entity_name = true;

    private String shortPackagePath = null;// 簡短包名,用於分類,默認表的第二字段小寫

    private String packagePath = null;// 指定實體生成所在包的路徑

    private String entityname = null;// 實體類名

    private String shortEntityname = null;// 簡短類型,排除表明第一第二段后剩余名稱

    private String[] colnamesOld; // 列名數組

    private String[] colnames; // 列名數組

    private String[] colTypes; // 列名類型數組

    private String[] colRemarks; // 列注釋數組

    private boolean f_util = false; // 是否需要導入包java.util.*

    private boolean f_sql = false; // 是否需要導入包java.sql.*

    private boolean f_bigdecimal = false; // 是否需要導入包java.sql.*

    private static Pattern linePattern = Pattern.compile("_(\\w)");

    /*
     * 構造函數
     */
    public MysqlUtil() {
        String tempStr = null;
        if (tablename.startsWith("tb_")) {
            tempStr = tablename.substring(3);
        } else {
            tempStr = tablename;
        }
        packagePath = tempStr.replace("_", "").toLowerCase();
        entityname = lineToHump(tempStr);
        if (is_use_short_package_path) {
            String tempShorPackagePathtStr = tempStr.substring(0, tempStr.indexOf("_"));
            shortPackagePath = tempShorPackagePathtStr.toLowerCase();
        } else {
            shortPackagePath = packagePath;
        }

        if (is_use_short_entity_name) {
            String tempShortEntityStr = tempStr.substring(tempStr.indexOf("_") + 1);
            shortEntityname = lineToHump(tempShortEntityStr);
        } else {
            shortEntityname = entityname;
        }
        // 創建連接
        Connection con;
        // 查要生成實體類的表
        String sql = "select * from " + tablename;
        PreparedStatement pStemt = null;
        try {
            try {
                Class.forName(DRIVER);
            } catch (ClassNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            con = DriverManager.getConnection(URL, NAME, PASS);
            pStemt = con.prepareStatement(sql);
            DatabaseMetaData dbmd = con.getMetaData();
            ResultSetMetaData rsmd = pStemt.getMetaData();
            int size = rsmd.getColumnCount(); // 統計列
            if (size > 7 && is_creater) {
                if (is_clude_id) {
                    colnamesOld = new String[size - 7];
                    colnames = new String[size - 7];
                    colTypes = new String[size - 7];
                    colRemarks = new String[size - 7];
                } else {
                    colnamesOld = new String[size - 6];
                    colnames = new String[size - 6];
                    colTypes = new String[size - 6];
                    colRemarks = new String[size - 6];
                }

            } else {
                if (is_clude_id) {
                    colnamesOld = new String[size - 1];
                    colnames = new String[size - 1];
                    colTypes = new String[size - 1];
                    colRemarks = new String[size - 1];
                } else {
                    colnamesOld = new String[size];
                    colnames = new String[size];
                    colTypes = new String[size];
                    colRemarks = new String[size];
                }

            }

            int j = 0;
            ResultSet resultSet = dbmd.getTables(null, "%", tablename, new String[] { "TABLE" });
            while (resultSet.next()) {
                String table = resultSet.getString("TABLE_NAME");

                if (tablename.equals(table)) {
                    ResultSet rs = con.getMetaData().getColumns(null, "%", tablename.toUpperCase(), "%");
                    while (rs.next()) {
                        // System.out.println("字段名:"+rs.getString("COLUMN_NAME")+"--字段注釋:"+rs.getString("REMARKS")+"--字段數據類型:"+rs.getString("TYPE_NAME"));
                        String name = rs.getString("COLUMN_NAME");

                        if ("id".equals(name.toLowerCase()) || "create_date".equals(name.toLowerCase())
                                || "create_by".equals(name.toLowerCase()) || "update_date".equals(name.toLowerCase())
                                || "update_by".equals(name.toLowerCase()) || "remarks".equals(name.toLowerCase())
                                || "del_flag".equals(name.toLowerCase())) {
                            continue;
                        }

                        colnamesOld[j] = name;
                        colnames[j] = lineToHump(name);
                        colTypes[j] = rs.getString("TYPE_NAME");

                        if (colTypes[j].equalsIgnoreCase("datetime")) {
                            f_util = true;
                        }

                        String remarks = rs.getString("REMARKS");
                        colRemarks[j] = remarks;

                        j++;
                    }
                }
            }

            String content = parse(colnames, colTypes, colRemarks);

            try {
                File directory = new File("");

                String path = this.getClass().getResource("").getPath();

                String dir1 = directory.getAbsolutePath() + "/src/main/java/" + this.basePath.replace(".", "/") + "/"
                        + "business" + "/" + dbname + "/" + this.shortPackagePath;
                File directory1 = new File(dir1);
                if (!directory1.exists()) {
                    directory1.mkdirs();
                }
                System.out.println(path);
                System.out.println("src/?/" + path.substring(path.lastIndexOf("/com/", path.length())));
                String outputPath = dir1 + "/" + initcap(shortEntityname) + ".java";
                if (!is_modify) {
                    FileWriter fw = new FileWriter(outputPath);
                    PrintWriter pw = new PrintWriter(fw);
                    pw.println(content);
                    pw.flush();
                    pw.close();
                    createDao();
                    createIService();
                    createService();
                    createMapper();
                } else {
                    try {
                        modifyMapper();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                System.out.println("success!");
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
        }
    }

    /**
     * 功能:生成實體類主體代碼
     * 
     * @param colnames
     * @param colTypes
     * @param colSizes
     * @return
     */
    private String parse(String[] colnames, String[] colTypes, String[] colRemarks) {
        StringBuffer sb1 = new StringBuffer();
        StringBuffer sb2 = new StringBuffer();
        StringBuffer sb = new StringBuffer();

        sb1.append("package " + this.basePath + ".business." + dbname + "." + this.shortPackagePath + ";\r\n");
        sb1.append("\r\n");

        sb.append("import " + this.basePath + ".base.entity.BaseEntity;\r\n");
        sb.append("\r\n");
        // 注釋部分
        sb.append("/**\r\n");
        sb.append(" * " + tablename + " 實體類\r\n");
        sb.append(" * " + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " " + this.authorName + "\r\n");
        sb.append(" */ \r\n");
        // 實體部分
        sb.append("public class " + initcap(shortEntityname) + " extends BaseEntity {\r\n");
        sb.append("\r\n");
        processAllAttrs(sb);// 屬性
        processAllMethod(sb);// get set方法
        sb.append("}");

        // 判斷是否導入工具包
        if (f_util) {
            sb2.append("import java.util.Date;\r\n");
            sb2.append("\r\n");
        }

        if (f_bigdecimal) {
            sb2.append("import java.math.BigDecimal;\r\n");
            sb2.append("\r\n");
        }

        if (f_sql) {
            sb2.append("import java.sql.*;\r\n");
            sb2.append("\r\n");
        }

        // System.out.println(sb.toString());
        return sb1.append(sb2.toString()).append(sb.toString()).toString();
    }

    /**
     * 功能:生成所有屬性
     * 
     * @param sb
     */
    private void processAllAttrs(StringBuffer sb) {
        sb.append("\t/**\r\n\t*\r\n\t*\r\n\t*\r\n\t*/\r\n");
        sb.append("\tprivate static final long serialVersionUID = 1L;\r\n");
        sb.append("\r\n");
        for (int i = 0; i < colnames.length; i++) {
            sb.append("\t/* " + colRemarks[i] + " */\r\n");
            sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\r\n");
            sb.append("\r\n");
        }

    }

    /**
     * 功能:生成所有方法
     * 
     * @param sb
     */
    private void processAllMethod(StringBuffer sb) {

        for (int i = 0; i < colnames.length; i++) {
            sb.append("\tpublic void set" + initcap(colnames[i]) + "(" + sqlType2JavaType(colTypes[i]) + " "
                    + colnames[i] + "){\r\n");
            sb.append("\t\tthis." + colnames[i] + "=" + colnames[i] + ";\r\n");
            sb.append("\t}\r\n");
            sb.append("\r\n");
            sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initcap(colnames[i]) + "(){\r\n");
            sb.append("\t\treturn " + colnames[i] + ";\r\n");
            sb.append("\t}\r\n");
            sb.append("\r\n");
        }

    }

    /**
     * 功能:將輸入字符串的首字母改成大寫
     * 
     * @param str
     * @return
     */
    private String initcap(String str) {

        char[] ch = str.toCharArray();
        if (ch[0] >= 'a' && ch[0] <= 'z') {
            ch[0] = (char) (ch[0] - 32);
        }

        return new String(ch);
    }

    /**
     * 功能:下划線轉駝峰
     * 
     * @param str
     * @return
     */
    private String lineToHump(String str) {
        str = str.toLowerCase();
        Matcher matcher = linePattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * 功能:獲得列的數據類型
     * 
     * @param sqlType
     * @return
     */
    private String sqlType2JavaType(String sqlType) {
        sqlType = sqlType.toUpperCase();
        if (sqlType.contains("UNSIGNED")) {
            sqlType = sqlType.replace("UNSIGNED", "").trim();
        }
        if (sqlType.equalsIgnoreCase("bit")) {
            return "Boolean";
        } else if (sqlType.equalsIgnoreCase("tinyint")) {
            return "Integer";
        } else if (sqlType.equalsIgnoreCase("smallint")) {
            return "Integer";
        } else if (sqlType.equalsIgnoreCase("int")) {
            return "Integer";
        } else if (sqlType.equalsIgnoreCase("bigint")) {
            f_bigdecimal = true;
            return "BigDecimal";
        } else if (sqlType.equalsIgnoreCase("float")) {
            f_bigdecimal = true;
            return "BigDecimal";
        } else if (sqlType.equalsIgnoreCase("numeric") || sqlType.equalsIgnoreCase("real")
                || sqlType.equalsIgnoreCase("money") || sqlType.equalsIgnoreCase("smallmoney")
                || sqlType.equalsIgnoreCase("double")) {
            f_bigdecimal = true;
            return "BigDecimal";
        } else if (sqlType.equalsIgnoreCase("decimal")) {
            f_bigdecimal = true;
            return "BigDecimal";
        } else if (sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("char")
                || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("nchar")
                || sqlType.equalsIgnoreCase("text") || sqlType.equalsIgnoreCase("longtext")) {
            return "String";
        } else if (sqlType.equalsIgnoreCase("datetime")) {
            f_util = true;
            return "Date";
        } else if (sqlType.equalsIgnoreCase("image")) {
            return "Blod";
        }
        return null;
    }

    /**
     * 功能:生成實體類DAO
     * 
     * @param colnames
     * @param colTypes
     * @param colSizes
     * @return
     * @throws IOException
     */
    private void createDao() throws IOException {
        String daoName = shortEntityname + "Dao";

        File directory = new File("");
        String dir1 = directory.getAbsolutePath() + "/src/main/java/" + this.basePath.replace(".", "/") + "/" + "dao"
                + "/" + this.shortPackagePath;
        File directory1 = new File(dir1);
        if (!directory1.exists()) {
            directory1.mkdirs();
        }
        String outputPath = dir1 + "/" + initcap(daoName) + ".java";
        FileWriter fw = new FileWriter(outputPath);
        PrintWriter pw = new PrintWriter(fw);

        StringBuffer sb = new StringBuffer();

        sb.append("package " + this.basePath + ".dao." + this.shortPackagePath + ";\r\n");
        sb.append("\r\n");
        sb.append("import org.springframework.stereotype.Repository;\r\n");
        sb.append("\r\n");

        sb.append("import " + this.basePath + ".base.dao.BaseDao;\r\n");
        sb.append("import " + this.basePath + ".business." + dbname + "." + this.shortPackagePath + "."
                + initcap(shortEntityname) + ";\r\n");
        sb.append("\r\n");
        // 注釋部分
        sb.append("/**\r\n");
        sb.append(" * 請不要在這里寫什么方法,因為根本不需要,這里只是起着一個橋梁過渡作用\r\n");
        sb.append(" * " + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " " + this.authorName + "\r\n");
        sb.append(" */ \r\n");
        sb.append("@Repository\r\n");
        // 實體部分
        sb.append("public class " + initcap(daoName) + "<T extends " + initcap(shortEntityname) + "> extends BaseDao<"
                + initcap(shortEntityname) + "> {\r\n");
        sb.append("\r\n");
        sb.append("}");

        pw.println(sb.toString());
        pw.flush();
        pw.close();
        System.out.println("success!");
    }

    /**
     * 功能:生成實體類Service
     * 
     * @param colnames
     * @param colTypes
     * @param colSizes
     * @return
     * @throws IOException
     */
    private void createIService() throws IOException {
        String serviceName = shortEntityname + "Service";

        File directory = new File("");
        String dir1 = directory.getAbsolutePath() + "/src/main/java/" + this.basePath.replace(".", "/") + "/" + "inters"
                + "/" + dbname + "/" + this.shortPackagePath;
        File directory1 = new File(dir1);
        if (!directory1.exists()) {
            directory1.mkdirs();
        }

        String outputPath = dir1 + "/I" + initcap(serviceName) + ".java";
        FileWriter fw = new FileWriter(outputPath);
        PrintWriter pw = new PrintWriter(fw);

        StringBuffer sb = new StringBuffer();

        sb.append("package " + this.basePath + ".inters." + dbname + "." + this.shortPackagePath + ";\r\n");
        sb.append("\r\n");
        sb.append("import " + this.basePath + ".business." + dbname + "." + shortPackagePath + "."
                + initcap(shortEntityname) + ";\r\n");
        sb.append("import " + this.basePath + ".inters.base.IBaseService;\r\n");
        sb.append("\r\n");
        // 注釋部分
        sb.append("/**\r\n");
        sb.append(" * 對外提供的接口,原則上這里只寫自定義語句\r\n");
        sb.append(" * " + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " " + this.authorName + "\r\n");
        sb.append(" */ \r\n");
        // 實體部分
        sb.append("public interface I" + initcap(serviceName) + "<T extends " + initcap(shortEntityname)
                + "> extends IBaseService<" + initcap(shortEntityname) + "> {\r\n");
        sb.append("\r\n");
        sb.append("}");

        pw.println(sb.toString());
        pw.flush();
        pw.close();
        System.out.println("success!");
    }

    /**
     * 功能:生成實體類Service
     * 
     * @param colnames
     * @param colTypes
     * @param colSizes
     * @return
     * @throws IOException
     */
    private void createService() throws IOException {
        String serviceName = shortEntityname + "Service";
        String daoName = shortEntityname + "Dao";

        File directory = new File("");
        String dir1 = directory.getAbsolutePath() + "/src/main/java/" + this.basePath.replace(".", "/") + "/"
                + "service" + "/" + this.shortPackagePath;
        File directory1 = new File(dir1);
        if (!directory1.exists()) {
            directory1.mkdirs();
        }

        String outputPath = dir1 + "/" + initcap(serviceName) + ".java";
        FileWriter fw = new FileWriter(outputPath);
        PrintWriter pw = new PrintWriter(fw);

        StringBuffer sb = new StringBuffer();

        sb.append("package " + this.basePath + ".service." + this.shortPackagePath + ";\r\n");
        sb.append("\r\n");
        sb.append("import org.springframework.beans.factory.annotation.Autowired;\r\n");
        sb.append("import org.springframework.stereotype.Service;\r\n");
        sb.append("\r\n");

        sb.append("import " + this.basePath + ".base.service.BaseService;\r\n");
        sb.append("import " + this.basePath + ".dao." + shortPackagePath + "." + initcap(daoName) + ";\r\n");
        sb.append("import " + this.basePath + ".business." + dbname + "." + shortPackagePath + "."
                + initcap(shortEntityname) + ";\r\n");
        sb.append("import " + this.basePath + ".inters." + dbname + "." + shortPackagePath + ".I" + initcap(serviceName)
                + ";\r\n");
        sb.append("\r\n");
        // 注釋部分
        sb.append("/**\r\n");
        sb.append(" * 對外提供接口的實現,原則上這里只寫自定義語句\r\n");
        sb.append(" * " + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " " + this.authorName + "\r\n");
        sb.append(" */ \r\n");
        // 實體部分
        sb.append("@Service(value = \"" + serviceName + "\")\r\n");
        sb.append("public class " + initcap(serviceName) + "<T extends " + initcap(shortEntityname)
                + "> extends BaseService<" + initcap(shortEntityname) + "> implements I" + initcap(serviceName)
                + "<T> {\r\n");
        sb.append("\r\n");

        sb.append("\t@Autowired\r\n");
        sb.append("\tprivate " + initcap(daoName) + "<T> " + daoName + ";\r\n");
        sb.append("\r\n");

        sb.append("\t@Override\r\n");
        sb.append("\tpublic " + initcap(daoName) + "<T> getDao() {\r\n");
        sb.append("\t\treturn this." + daoName + ";\r\n");
        sb.append("\t}\r\n\r\n");
        sb.append("}");

        pw.println(sb.toString());
        pw.flush();
        pw.close();
        System.out.println("success!");
    }

    private void createMapper() throws IOException {
        String mapperName = shortEntityname + "Mapper";

        String[] totalColNames = new String[colnames.length + 7];
        totalColNames[0] = "id";
        for (int i = 0; i < colnamesOld.length; i++) {
            totalColNames[i + 1] = colnamesOld[i];
        }

        if (is_creater) {
            totalColNames[colnamesOld.length + 1] = "create_date";
            totalColNames[colnamesOld.length + 2] = "create_by";
            totalColNames[colnamesOld.length + 3] = "update_date";
            totalColNames[colnamesOld.length + 4] = "update_by";
            totalColNames[colnamesOld.length + 5] = "remarks";
            totalColNames[colnamesOld.length + 6] = "del_flag";
        }

        File directory = new File("");

        String dir1 = directory.getAbsolutePath() + "/src/main/resources/" + "maps" + "/" + "read/" + shortPackagePath;
        File directory1 = new File(dir1);
        if (!directory1.exists()) {
            directory1.mkdirs();
        }
        String outputPath = dir1 + "/" + initcap(mapperName) + ".xml";
        FileWriter fw = new FileWriter(outputPath);
        XMLWriter xmlWriter = new XMLWriter(fw);
        xmlWriter.setEscapeText(false);

        StringBuffer sb = new StringBuffer();
        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
        sb.append("<!DOCTYPE mapper\r\n");
        sb.append("\tPUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\r\n");
        sb.append("\t\"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\r\n");
        sb.append(
                "<mapper namespace=\"read." + this.shortPackagePath + "." + shortEntityname.toLowerCase() + "\">\r\n");

        sb.append("\r\n");

        sb.append("\t<resultMap id=\"BaseResultMap\" type=\"" + this.basePath + ".business." + dbname + "."
                + this.shortPackagePath + "." + initcap(shortEntityname) + "\" >\r\n");
        for (int i = 0; i < totalColNames.length; i++) {
            if (i == 0) {
                sb.append("\t\t<id column=\"" + totalColNames[i] + "\" property=\"" + lineToHump(totalColNames[i])
                        + "\"/>\r\n");
            } else {
                sb.append("\t\t<result column=\"" + totalColNames[i] + "\" property=\"" + lineToHump(totalColNames[i])
                        + "\"/>\r\n");
            }
        }
        sb.append("\t</resultMap>\r\n");
        sb.append("\r\n");

        sb.append("\t<!-- 配合resultMap使用查詢數據列 -->\r\n");
        sb.append("\t<sql id=\"Base_Result_Map_Column_List\">\r\n");
        for (int i = 0; i < totalColNames.length; i++) {
            sb.append("\t\tt." + totalColNames[i]);
            if (i == totalColNames.length - 1) {
                sb.append("\r\n");
            } else {
                sb.append(",\r\n");
            }
        }
        sb.append("\t</sql>\r\n");
        sb.append("\r\n");

        sb.append("\t<!-- 查詢數據列 -->\r\n");
        sb.append("\t<sql id=\"Base_Column_List\">\r\n");
        for (int i = 0; i < totalColNames.length; i++) {
            sb.append("\t\tt." + totalColNames[i]);
            if (!totalColNames[i].equals(lineToHump(totalColNames[i]))) {
                sb.append(" AS " + lineToHump(totalColNames[i]));
            }
            if (i == totalColNames.length - 1) {
                sb.append("\r\n");
            } else {
                sb.append(",\r\n");
            }
        }
        sb.append("\t</sql>\r\n");
        sb.append("\r\n");

        sb.append("\t<!-- 查詢條件 -->\r\n");
        sb.append("\t<sql id=\"Where_Clause\">\r\n");
        sb.append("\t\twhere 1=1\r\n");
        sb.append("\t\t<trim suffixOverrides=\",\">\r\n");
        for (int i = 0; i < totalColNames.length; i++) {
            sb.append("\t\t<if test=\"" + lineToHump(totalColNames[i]) + " != null and " + lineToHump(totalColNames[i])
                    + " != ''\" > \r\n");
            sb.append("\t\t\t and t." + totalColNames[i]);
            sb.append("=#{");
            sb.append(lineToHump(totalColNames[i]));
            sb.append("}");
            sb.append("\r\n");
            sb.append("\t\t</if>\r\n");
        }
        sb.append("\t\t</trim>\r\n");
        sb.append("\t</sql>\r\n");
        sb.append("\r\n");

        sb.append("\t<!-- 根據id查詢 -->\r\n");
        sb.append("\t<select id=\"queryById\" resultType=\"" + this.basePath + ".business." + dbname + "."
                + this.shortPackagePath + "." + initcap(shortEntityname) + "\" parameterType=\"Object\">\r\n");
        sb.append("\t\tselect\r\n");
        sb.append("\t\t<include refid=\"Base_Column_List\" />\r\n");
        sb.append("\t\tfrom " + tablename + " t\r\n");
        sb.append("\t\twhere t.id = #{id}\r\n");
        sb.append("\t</select>\r\n");
        sb.append("\r\n");

        sb.append("\t<!-- 查詢 -->\r\n");
        sb.append("\t<select id=\"selectOne\" resultType=\"" + this.basePath + ".business." + dbname + "."
                + this.shortPackagePath + "." + initcap(shortEntityname) + "\" parameterType=\"Object\">\r\n");
        sb.append("\t\tselect\r\n");
        sb.append("\t\t<include refid=\"Base_Column_List\" />\r\n");
        sb.append("\t\tfrom " + tablename + " t\r\n");
        sb.append("\t\t<include refid=\"Where_Clause\" />\r\n");
        sb.append("\t</select>\r\n");
        sb.append("\r\n");

        sb.append("\t<!-- 查詢集合 -->\r\n");
        sb.append("\t<select id=\"selectList\" resultType=\"" + this.basePath + ".business." + dbname + "."
                + this.shortPackagePath + "." + initcap(shortEntityname) + "\" parameterType=\"Object\">\r\n");
        sb.append("\t\tselect\r\n");
        sb.append("\t\t<include refid=\"Base_Column_List\" />\r\n");
        sb.append("\t\tfrom " + tablename + " t\r\n");
        sb.append("\t\t<include refid=\"Where_Clause\" />\r\n");
        sb.append("\t</select>\r\n");
        sb.append("\r\n");

        sb.append("\t<!-- 查詢總數 -->\r\n");
        sb.append("\t<select id=\"queryByCount\" resultType=\"java.lang.Integer\" parameterType=\"Object\">\r\n");
        sb.append("\t\tselect count(1) from " + tablename + " t\r\n");
        sb.append("\t\t<include refid=\"Where_Clause\" />\r\n");
        sb.append("\t</select>\r\n");
        sb.append("\r\n");

        sb.append("\t<!-- 查詢列表-->\r\n");
        sb.append("\t<select id=\"queryByList\" resultType=\"" + this.basePath + ".business." + dbname + "."
                + this.shortPackagePath + "." + initcap(shortEntityname) + "\" parameterType=\"Object\">\r\n");
        sb.append("\t\tselect\r\n");
        sb.append("\t\t<include refid=\"Base_Column_List\" />\r\n");
        sb.append("\t\tfrom " + tablename + " t\r\n");
        sb.append("\t\t<include refid=\"Where_Clause\" />\r\n");
        sb.append("\t<if test=\"pager.orderCondition != null and pager.orderCondition != ''\">\r\n");
        sb.append("\t\t${pager.orderCondition}\r\n");
        sb.append("\t</if>\r\n");
        sb.append("\t<if test=\"pager.mysqlQueryCondition != null and pager.mysqlQueryCondition != ''\">\r\n");
        sb.append("\t\t${pager.mysqlQueryCondition}\r\n");
        sb.append("\t</if>\r\n");
        sb.append("\t</select>\r\n");
        sb.append("\r\n");
        sb.append("</mapper>");

        xmlWriter.write(sb.toString());
        xmlWriter.flush();
        xmlWriter.close();

        String dir2 = directory.getAbsolutePath() + "/src/main/resources/" + "maps" + "/" + "write/" + shortPackagePath;
        File directory2 = new File(dir2);
        if (!directory2.exists()) {
            directory2.mkdirs();
        }
        String outputPath2 = dir2 + "/" + initcap(mapperName) + ".xml";
        FileWriter fw2 = new FileWriter(outputPath2);
        XMLWriter xmlWriter2 = new XMLWriter(fw2);
        xmlWriter2.setEscapeText(false);

        StringBuffer sb2 = new StringBuffer();
        sb2.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
        sb2.append("<!DOCTYPE mapper\r\n");
        sb2.append("\tPUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\r\n");
        sb2.append("\t\"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\r\n");
        sb2.append(
                "<mapper namespace=\"write." + this.shortPackagePath + "." + shortEntityname.toLowerCase() + "\">\r\n");
        sb2.append("\r\n");

        sb2.append("\t<!-- 查詢條件 -->\r\n");
        sb2.append("\t<sql id=\"Where_Clause\">\r\n");
        sb2.append("\t\twhere 1=1\r\n");
        sb2.append("\t\t<trim suffixOverrides=\",\">\r\n");
        for (int i = 0; i < totalColNames.length; i++) {
            sb2.append("\t\t<if test=\"" + lineToHump(totalColNames[i]) + " != null and " + lineToHump(totalColNames[i])
                    + " != ''\" > \r\n");
            sb2.append("\t\t\t and t." + totalColNames[i]);
            sb2.append("=#{");
            sb2.append(lineToHump(totalColNames[i]));
            sb2.append("}");
            sb2.append("\r\n");
            sb2.append("\t\t</if>\r\n");
        }
        sb2.append("\t\t</trim>\r\n");
        sb2.append("\t</sql>\r\n");
        sb2.append("\r\n");

        sb2.append("\t<!-- 插入記錄 -->\r\n");
        sb2.append("\t<insert id=\"add\" parameterType=\"Object\">\r\n");
        sb2.append("\t\tinsert into " + tablename + " (\r\n");
        for (int i = 0; i < totalColNames.length; i++) {
            sb2.append("\t\t\t" + totalColNames[i]);
            if (i != totalColNames.length - 1) {
                sb2.append(",\r\n");
            }
        }
        sb2.append(")\r\n");
        sb2.append("\t\tvalues (\r\n");
        for (int i = 0; i < totalColNames.length; i++) {
            sb2.append("\t\t\t#{");
            sb2.append(lineToHump(totalColNames[i]));
            sb2.append("}");
            if (i != totalColNames.length - 1) {
                sb2.append(",\r\n");
            }
        }
        sb2.append(")\r\n");
        sb2.append("\t</insert>\r\n");
        sb2.append("\r\n");

        sb2.append("\t<!-- 修改記錄,只修改只不為空的字段 -->\r\n");
        sb2.append("\t<update id=\"updateBySelective\" parameterType=\"Object\" >\r\n");
        sb2.append("\t\tupdate " + tablename + " set\r\n");
        sb2.append("\t\t<trim  suffixOverrides=\",\" >\r\n");
        for (int i = 1; i < totalColNames.length; i++) {
            sb2.append("\t\t<if test=\"" + lineToHump(totalColNames[i]) + " != null and " + lineToHump(totalColNames[i])
                    + " != ''\" > \r\n");
            sb2.append("\t\t\t" + totalColNames[i]);
            sb2.append("=#{");
            sb2.append(lineToHump(totalColNames[i]));
            sb2.append("}");
            if (i != totalColNames.length - 1) {
                sb2.append(",");
            }
            sb2.append("\r\n");
            sb2.append("\t\t</if>\r\n");
        }
        sb2.append("\t\t</trim>\r\n");
        sb2.append("\t\twhere id = #{id}\r\n");
        sb2.append("\t</update>\r\n");
        sb2.append("\r\n");

        sb2.append("\t<!-- 修改記錄,只要不為null都進行修改,避免0位識別為空字符串 -->\r\n");
        sb2.append("\t<update id=\"update\" parameterType=\"Object\" >\r\n");
        sb2.append("\t\tupdate " + tablename + " set\r\n");
        sb2.append("\t\t<trim  suffixOverrides=\",\" >\r\n");
        for (int i = 1; i < totalColNames.length; i++) {
            sb2.append("\t\t<if test=\"" + lineToHump(totalColNames[i]) + " != null\" > \r\n");
            sb2.append("\t\t\t" + totalColNames[i]);
            sb2.append("=#{");
            sb2.append(lineToHump(totalColNames[i]));
            sb2.append("}");
            if (i != totalColNames.length - 1) {
                sb2.append(",");
            }
            sb2.append("\r\n");
            sb2.append("\t\t</if>\r\n");
        }
        sb2.append("\t\t</trim>\r\n");
        sb2.append("\t\twhere id = #{id}\r\n");
        sb2.append("\t</update>\r\n");
        sb2.append("\r\n");

        sb2.append("\t<!-- 按照條件刪除記錄,徹底刪除 -->\r\n");
        sb2.append("\t<delete id=\"deleteBySelective\" parameterType=\"Object\" >\r\n");
        sb2.append("\t\tdelete t from " + tablename + " t \r\n");
        sb2.append("\t\t<include refid=\"Where_Clause\" />\r\n");
        sb2.append("\t</delete>\r\n");
        sb2.append("\r\n");

        sb2.append("\t<!-- 按照ID刪除記錄,徹底刪除 -->\r\n");
        sb2.append("\t<delete id=\"deleteById\" parameterType=\"Object\" >\r\n");
        sb2.append("\t\tdelete from " + tablename + " \r\n");
        sb2.append("\t\twhere id = #{id}\r\n");
        sb2.append("\t</delete>\r\n");
        sb2.append("\r\n");

        sb2.append("\t<!-- 按照條件刪除記錄,邏輯刪除 -->\r\n");
        sb2.append("\t<update id=\"deleteLogicBySelective\" parameterType=\"Object\">\r\n");
        sb2.append("\t\tupdate " + tablename + " t set t.del_flag=1\r\n");
        sb2.append("\t\t<include refid=\"Where_Clause\" />\r\n");
        sb2.append("\t</update>\r\n");
        sb2.append("\r\n");

        sb2.append("\t<!-- 按照ID刪除記錄,邏輯刪除 -->\r\n");
        sb2.append("\t<update id=\"deleteLogicById\" parameterType=\"Object\">\r\n");
        sb2.append("\t\tupdate " + tablename + " set del_flag=1\r\n");
        sb2.append("\t\twhere id = #{id}\r\n");
        sb2.append("\t</update>\r\n");
        sb2.append("\r\n");

        sb2.append("</mapper>");

        xmlWriter2.write(sb2.toString());
        xmlWriter2.flush();
        xmlWriter2.close();

    }

    private void modifyMapper() throws Exception {
        int readCnt = 0;
        int writeCnt = 0;
        String mapperName = shortEntityname + "Mapper";
        File directory = new File("");

        String dir1 = directory.getAbsolutePath() + "/src/main/resources/" + "maps" + "/" + "read/" + shortPackagePath;
        File directory1 = new File(dir1);
        if (!directory1.exists()) {
            directory1.mkdirs();
        }
        StringBuffer tempSb1 = new StringBuffer();
        String outputPath1 = dir1 + "/" + initcap(mapperName) + ".xml";
        RandomAccessFile raf1 = new RandomAccessFile(outputPath1, "r");
        String currReadLineString = null;
        while (raf1.getFilePointer() < raf1.length()) {
            currReadLineString = new String(raf1.readLine().getBytes("ISO-8859-1"), "utf-8");
            if (is_add) {
                if (readCnt <= 3) {
                    tempSb1.append(currReadLineString + "\r\n");
                    if (currReadLineString.equals("\t\t<result column=\"" + prevFieldName + "\" property=\""
                            + lineToHump(prevFieldName) + "\"/>")) {
                        readCnt++;
                        for (String tempStr : modifyFieldArr) {
                            tempSb1.append("\t\t<result column=\"" + tempStr + "\" property=\"" + lineToHump(tempStr)
                                    + "\"/>\r\n");
                        }

                    } else if (currReadLineString.equals("\t\tt." + prevFieldName + ",")) {
                        readCnt++;
                        for (String tempStr : modifyFieldArr) {
                            tempSb1.append("\t\tt." + tempStr + ",\r\n");
                        }

                    } else if (currReadLineString
                            .equals("\t\tt." + prevFieldName + " AS " + lineToHump(prevFieldName) + ",")) {
                        readCnt++;
                        for (String tempStr : modifyFieldArr) {
                            tempSb1.append("\t\tt." + tempStr + " AS " + lineToHump(tempStr) + ",\r\n");
                        }

                    } else if (currReadLineString.equals("\t\t<if test=\"" + lineToHump(prevFieldName) + " != null and "
                            + lineToHump(prevFieldName) + " != ''\" > ")) {
                        readCnt++;
                        currReadLineString = new String(raf1.readLine().getBytes("ISO-8859-1"), "utf-8");
                        tempSb1.append(currReadLineString + "\r\n");
                        currReadLineString = new String(raf1.readLine().getBytes("ISO-8859-1"), "utf-8");
                        tempSb1.append(currReadLineString + "\r\n");
                        for (String tempStr : modifyFieldArr) {
                            tempSb1.append("\t\t<if test=\"" + lineToHump(tempStr) + " != null and "
                                    + lineToHump(tempStr) + " != ''\" > \r\n")
                                    .append("\t\t\tand t." + tempStr + "=#{" + lineToHump(tempStr) + "}\r\n")
                                    .append("\t\t</if>\r\n");
                        }

                    }
                } else {
                    tempSb1.append(currReadLineString + "\r\n");
                }
            } else {
                if (readCnt <= modifyFieldArr.length * 4 - 1) {
                    boolean is_del = false;
                    for (String tempStr : modifyFieldArr) {
                        if (currReadLineString
                                .equals("\t\t<result column=\"" + tempStr + "\" property=\"" + lineToHump(tempStr)
                                        + "\"/>")
                                || currReadLineString.equals("\t\tt." + tempStr + ",")
                                || currReadLineString.equals("\t\tt." + tempStr + " AS " + lineToHump(tempStr) + ",")) {
                            readCnt++;
                            is_del = true;
                        }
                        if (currReadLineString.equals("\t\t<if test=\"" + lineToHump(tempStr) + " != null and "
                                + lineToHump(tempStr) + " != ''\" > ")) {
                            readCnt++;
                            raf1.readLine();
                            raf1.readLine();
                            is_del = true;
                        }
                    }
                    if (!is_del) {
                        tempSb1.append(currReadLineString + "\r\n");
                    }
                } else {
                    tempSb1.append(currReadLineString + "\r\n");
                }
            }
        }
        raf1.close();
        FileWriter fw1 = new FileWriter(outputPath1);
        XMLWriter xmlWriter1 = new XMLWriter(fw1);
        xmlWriter1.setEscapeText(false);
        xmlWriter1.write(tempSb1.toString());
        xmlWriter1.flush();
        xmlWriter1.close();

        String dir2 = directory.getAbsolutePath() + "/src/main/resources/" + "maps" + "/" + "write/" + shortPackagePath;
        File directory2 = new File(dir2);
        if (!directory2.exists()) {
            directory2.mkdirs();
        }
        StringBuffer tempSb2 = new StringBuffer();
        String outputPath2 = dir2 + "/" + initcap(mapperName) + ".xml";
        RandomAccessFile raf2 = new RandomAccessFile(outputPath2, "r");
        while (raf2.getFilePointer() < raf2.length()) {
            currReadLineString = new String(raf2.readLine().getBytes("ISO-8859-1"), "utf-8");
            if (is_add) {
                if (writeCnt <= 4) {
                    tempSb2.append(currReadLineString + "\r\n");
                    if (currReadLineString.equals("\t\t<if test=\"" + lineToHump(prevFieldName) + " != null and "
                            + lineToHump(prevFieldName) + " != ''\" > ")) {
                        writeCnt++;
                        if (writeCnt % 5 == 1) {
                            currReadLineString = new String(raf2.readLine().getBytes("ISO-8859-1"), "utf-8");
                            tempSb2.append(currReadLineString + "\r\n");
                            currReadLineString = new String(raf2.readLine().getBytes("ISO-8859-1"), "utf-8");
                            tempSb2.append(currReadLineString + "\r\n");
                            for (String tempStr : modifyFieldArr) {
                                tempSb2.append("\t\t<if test=\"" + lineToHump(tempStr) + " != null and "
                                        + lineToHump(tempStr) + " != ''\" > \r\n")
                                        .append("\t\t\t and t." + tempStr + "=#{" + lineToHump(tempStr) + "}\r\n")
                                        .append("\t\t</if>\r\n");
                            }
                        }
                        if (writeCnt % 5 == 4) {
                            currReadLineString = new String(raf2.readLine().getBytes("ISO-8859-1"), "utf-8");
                            tempSb2.append(currReadLineString + "\r\n");
                            currReadLineString = new String(raf2.readLine().getBytes("ISO-8859-1"), "utf-8");
                            tempSb2.append(currReadLineString + "\r\n");
                            for (String tempStr : modifyFieldArr) {
                                tempSb2.append("\t\t<if test=\"" + lineToHump(tempStr) + " != null and "
                                        + lineToHump(tempStr) + " != ''\" > \r\n")
                                        .append("\t\t\t" + tempStr + "=#{" + lineToHump(tempStr) + "},\r\n")
                                        .append("\t\t</if>\r\n");
                            }
                        }
                    } else if (currReadLineString.equals("\t\t\t" + prevFieldName + ",")) {
                        writeCnt++;
                        for (String tempStr : modifyFieldArr) {
                            tempSb2.append("\t\t\t" + tempStr + ",\r\n");
                        }

                    } else if (currReadLineString.equals("\t\t\t#{" + lineToHump(prevFieldName) + "},")) {
                        writeCnt++;
                        for (String tempStr : modifyFieldArr) {
                            tempSb2.append("\t\t\t#{" + lineToHump(tempStr) + "},\r\n");
                        }

                    } else if (currReadLineString
                            .equals("\t\t<if test=\"" + lineToHump(prevFieldName) + " != null\" > ")) {
                        writeCnt++;
                        currReadLineString = new String(raf2.readLine().getBytes("ISO-8859-1"), "utf-8");
                        tempSb2.append(currReadLineString + "\r\n");
                        currReadLineString = new String(raf2.readLine().getBytes("ISO-8859-1"), "utf-8");
                        tempSb2.append(currReadLineString + "\r\n");
                        for (String tempStr : modifyFieldArr) {
                            tempSb2.append("\t\t<if test=\"" + lineToHump(tempStr) + " != null\" > \r\n")
                                    .append("\t\t\t" + tempStr + "=#{" + lineToHump(tempStr) + "},\r\n")
                                    .append("\t\t</if>\r\n");
                        }

                    }
                } else {
                    tempSb2.append(currReadLineString + "\r\n");
                }
            } else {
                if (writeCnt <= modifyFieldArr.length * 5 - 1) {
                    boolean is_del = false;
                    for (String tempStr : modifyFieldArr) {
                        if (currReadLineString.equals("\t\t\t" + tempStr + ",")
                                || currReadLineString.equals("\t\t\t#{" + lineToHump(tempStr) + "},")) {
                            writeCnt++;
                            is_del = true;
                        }
                        if (currReadLineString
                                .equals("\t\t<if test=\"" + lineToHump(tempStr) + " != null and " + lineToHump(tempStr)
                                        + " != ''\" > ")
                                || currReadLineString
                                        .equals("\t\t<if test=\"" + lineToHump(tempStr) + " != null\" > ")) {
                            writeCnt++;
                            raf2.readLine();
                            raf2.readLine();
                            is_del = true;
                        }
                    }
                    if (!is_del) {
                        tempSb2.append(currReadLineString + "\r\n");
                    }
                } else {
                    tempSb2.append(currReadLineString + "\r\n");
                }
            }
        }
        raf2.close();
        FileWriter fw2 = new FileWriter(outputPath2);
        XMLWriter xmlWriter2 = new XMLWriter(fw2);
        xmlWriter2.setEscapeText(false);
        xmlWriter2.write(tempSb2.toString());
        xmlWriter2.flush();
        xmlWriter2.close();
    }

    /**
     * 出口 TODO
     * 
     * @param args
     */
    public static void main(String[] args) {
        new MysqlUtil();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM