java 根據表名自動生成增,刪,改,查程序代碼, 包括Dao接口類,Dao實現類(一)

由於長期寫代碼, 所以在很多工具之前, 就寫了自己的代碼生成器.

前面的文章講了生成 java bean 這個更直接 一把全部生成5個文件

比如 INTERFACE_ID_MAPPING 表生成:

InterfaceIdMapping.java 文件

IInterfaceIdMappingService.java 服務層接口

InterfaceIdMappingServicePojoImpl 服務層接口實現

IInterfaceIdMappingDao.java 層接口

InterfaceIdMappingDaoJdbcImpl 層接口實現

有些人問爲什麼要生成這麼多層?  Service層主要是用來發布微服務,與dao層隔離, dao層有些內容不方便公開.

所以 Service層與 dao層是有必要的 (現在很多開源工具也能做到這點, 但是有些事件還是自己做行靠譜)

 

先來看工具代碼

TableToSerivceByArchUtils.java:

package com.test;

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.sql.DataSource;

import org.springframework.jdbc.datasource.DataSourceUtils;

import com.test.ServiceLocator;

/**
 * 根據數據庫表生成[檔案服務代碼].
 * 1錶轉換成Bean, 2生成Serivce層接口,3生成Serivce層實現, 4生成Dao層接口, 5生成Dao層實現.
 * 說明:可以按表結構生成原來的大寫字段bean, 也可以轉成按java規則要求的bean.
 * 是否需要轉換,設置isConvertColName參數.
 * @author  guishuanglin 2013-11-26
 * update 2015-06-24
 */
public class TableToSerivceByArchUtils {
	//BYTE,SHORT對象用INTEGE,不再區別處理.
	//FLOAT,DOUBLE對象用BIGDECIMAL,不再區別處理.
	private final int jINTEGER = 1;
	private final int jLONG = 2;
	private final int jDATE = 3;
	private final int jSTRING = 4;
	private final int jBIGDECIMAL = 5;
	private final int jOBJECT = 6;
	private final String sINTEGER ="Integer";
	private final String sLONG = "Long";
	private final String sDATE = "Date";
	private final String sSTRING = "String";
	private final String sBIGDECIMAL = "BigDecimal";
	private final String sOBJECT = "Object";
	//資料
	private int dataBaseType =-1;
	private String tablename = "";
	private String beanName = "";
	private int colCount;//列數
	private String[] benFieldName;
	private String[] benClassName;
	private int[] benClassType;
	private String[] colnames;
	private String[] colTypes;//列類型名字.
	private int[] colSizes; // 列字符大小
	private int[] colScale; // 列小數精度
	//引用包
	private boolean importUtil = false; // 導入包java.util.*
	private boolean importSql = false;  // 包java.sql.*
	private boolean importMath = false; // 包java.math.*
	//控制變量
	private boolean isConvertColName =true;//是否把列名轉成java規範的名字.
	private boolean onlyCreateBean =true;	//只生成Bean.
	private boolean isCreateBatchMethod =false;//是否創建批處理方法.
	//類附加註釋
	private SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd");
	private String strDate=null;
	private String author="table tool";
	
	/** 入口 */
	public void execute(String dbTableName) {
		if(dbTableName ==null) return;
		if(strDate ==null)
			strDate = DateFormat.format(new Date());
		tablename = dbTableName;
		beanName  = this.firstUpperCase(this.toJavaName(dbTableName.toLowerCase()));
		boolean b = processTableMetaData(dbTableName);
		if(b){
			//初始 bean字段數組.
			benFieldName = new String[colCount];
			benClassName = new String[colCount];
			benClassType = new int[colCount];
			//處理每列對應的bean屬性與java類型
			this.processClassnames();
			//生成實體 bean
			b =tableToEntity(beanName);
			if(b && !onlyCreateBean){
				this.builderServiceCode();
				this.builderDaoCode();
			}
		}
	}
		
	/** 處理數表媒體數據, spring數據源名稱: dataSource0,dataSource1,dataSource3,dataSource4,dataSource5. */
	private boolean processTableMetaData(String tName) {
		boolean b =false;
		DataSource ds = (DataSource) ServiceLocator.getService("dataSource0");
		Connection conn = DataSourceUtils.getConnection(ds); // 得到數據庫連接
		String strsql = "SELECT * FROM " + tablename;//+" WHERE ROWNUM=1";
		try {
			System.out.println("================ "+tName+" ================");
			System.out.println(strsql);
			this.dataBaseType =this.getDbType(conn);
			PreparedStatement pstmt = conn.prepareStatement(strsql);
			pstmt.executeQuery();
			ResultSetMetaData rsmd = pstmt.getMetaData();
			int size = rsmd.getColumnCount(); // 共有多少列
			colCount = size;
			colnames = new String[size];
			colTypes = new String[size];
			colSizes = new int[size];
			colScale = new int[size];
			for (int i = 0; i < rsmd.getColumnCount(); i++) {
				colnames[i] = rsmd.getColumnName(i + 1).toLowerCase();
				colTypes[i] = rsmd.getColumnTypeName(i + 1).toLowerCase();
				colSizes[i] = rsmd.getPrecision(i + 1);
				colScale[i] = rsmd.getScale(i + 1);
				System.out.println(i+",DBType: "+rsmd.getColumnTypeName(i + 1)+", javaType: "+rsmd.getColumnClassName(i + 1));
			}
			b =true;
			pstmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DataSourceUtils.releaseConnection(conn, ds);
		}
		return b;
	}
	
	/**
	 * 獲取主流數據庫類型.
	 * -1-未知,0-ORACLE,1-SYBASE,2-SQLSERVER,3-DB2,4-MYSQL
	 * @throws SQLException   
	 */
	private int getDbType(Connection conn) throws SQLException{
		if(conn==null) return -1;
		int dbType =-1;
		DatabaseMetaData dbMeta =conn.getMetaData();
		String dbProductName =dbMeta.getDatabaseProductName();
		String url = dbMeta.getURL().toLowerCase();
		if (url != null){
			if(url.indexOf("oracle") >=0 ){
				dbType = 0;
			}else if(url.indexOf("sybase") >=0){
				dbType = 1;
			}else if(url.indexOf("sqlserver") >=0 ){
				dbType = 2;
			}else if(url.indexOf("ibm") >=0 ){
				dbType = 3;
			}else if(url.indexOf("mysql") >=0 ){
				dbType = 4;
			}else{
				System.out.println("警告: [不確定的數據庫類型]: "+url+","+dbProductName);
			}
        }else{
        	System.out.println("警告: [不確定的數據庫類型]: "+url+","+dbProductName);
        }
		dbMeta =null;
		return dbType;
	}

	//================================生成實體部分======================================
	
	/**
	 * 根據文件名,代碼內容生成java代碼;
	 */
	private boolean fileWriter(String name, String javaCodeContent) {
		boolean b =false;
		try {//編碼根據項目本身要求的字符編碼修改.
			FileOutputStream out = new FileOutputStream(name + ".java");
			byte[] bytes = new byte[20480];//20k
			byte[] inbytes = javaCodeContent.getBytes("utf-8");
			ByteArrayInputStream in = new ByteArrayInputStream(inbytes);
			int c;
			while ((c = in.read(bytes)) != -1) {
				out.write(bytes, 0, c);
			}
			in.close();
			in = null;
			bytes =null;
			inbytes =null;
			b =true;
			System.out.println("生成================ "+name+" ================完成");
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("生成================ "+name+" ================異常");
		} finally {
			javaCodeContent =null;
		}
		return b;
	}

	
	/**
	 * 生成實體類文件
	 * @param args
	 */
	private boolean tableToEntity(String tName) {
		boolean b =false;
		String content = buildEntityCode();
		b=fileWriter(tName, content);
		return b;
	}

	/**
	 * 1, 處理列名,把空格下劃線'_'去掉,同時把下劃線後的首字母大寫
	 * 要是整個列在3個字符及以內,則去掉'_'後,不把"_"後首字母大寫.
	 * 同時把數據庫列名,列類型寫到註釋中以便查看,
	 * 2, 處理bean字段的java類型
	 *   -1-未知,0-ORACLE,1-SYBASE,2-SQLSERVER,3-DB2,4-MYSQL
	 * 3, java類型對應的數字常量.
	 */
	private void processClassnames() {
		for (int i = 0; i < colnames.length; i++) {
			//1
			if(this.isConvertColName){
				benFieldName[i] = this.toJavaName(colnames[i]);
			}else{
				benFieldName[i] = colnames[i].toUpperCase();
			}
			//2
			if(this.dataBaseType ==0){
				benClassName[i] = this.oracleTypeToJavaType(colTypes[i], colSizes[i], colScale[i]);
			}else if(this.dataBaseType ==1){
				benClassName[i] = this.sybaseTypeToJavaType(colTypes[i], colSizes[i], colScale[i]);
			}else if(this.dataBaseType ==2){//暫用oralce類型
				benClassName[i] = this.oracleTypeToJavaType(colTypes[i], colSizes[i], colScale[i]);
			}else if(this.dataBaseType ==3){//暫用oralce類型
				benClassName[i] = this.oracleTypeToJavaType(colTypes[i], colSizes[i], colScale[i]);
			}else if(this.dataBaseType ==4){//暫用oralce類型
				benClassName[i] = this.oracleTypeToJavaType(colTypes[i], colSizes[i], colScale[i]);
			}else{//暫用oralce類型
				benClassName[i] = this.oracleTypeToJavaType(colTypes[i], colSizes[i], colScale[i]);
			}
			//3 轉換類型對應的常量值,方便以後判斷處理.
			if(benClassName[i].equals(this.sINTEGER)){
				benClassType[i]=this.jINTEGER;
			}else if(benClassName[i].equals(this.sLONG)){
				benClassType[i]=this.jLONG;
			}else if(benClassName[i].equals(this.sBIGDECIMAL)){
				//bean是否用到Bigdecimal類型的包
				importMath = true;
				benClassType[i]=this.jBIGDECIMAL;
			}else if(benClassName[i].equals(this.sSTRING)){
				benClassType[i]=this.jSTRING;
			}else if(benClassName[i].equals(this.sDATE)){
				//bean是否用到Date類型的包
				importUtil = true;
				benClassType[i]=this.jDATE;
			}else if(benClassName[i].equals(this.sOBJECT)){
				benClassType[i]=this.jOBJECT;
			}else{
				benClassType[i]=this.jOBJECT;
			}
		}
	}
		
	/**
	 * 解析處理(生成實體類主體代碼)
	 */
	private String buildEntityCode() {
		StringBuffer sb = new StringBuffer();
		sb.append("\r\nimport java.io.Serializable;\r\n");
		if (importUtil) {
			sb.append("import java.util.Date;\r\n");
		}
		if (importSql) {
			sb.append("import java.sql.*;\r\n\r\n");
		}
		if(importMath){
			sb.append("import java.math.*;\r\n\r\n");
		}
		//表註釋
		processNote(sb);
		sb.append("public class " + this.beanName + " implements Serializable {\r\n");
		processAllAttrs(sb);
		processAllMethod(sb);
		sb.append("}\r\n");
		System.out.println(sb.toString());
		return sb.toString();

	}
	
	/**
	 * 把數據庫列名,列類型,長度,精度寫到註釋中以便查看.
	 * (目前字段文本註釋暫不能處理)
	 * @param sb
	 */
	private void processNote(StringBuffer sb) {
		//可增加類說明
		sb.append("\r\n/** \r\n");
		sb.append(" * "+tablename+":\r\n");
		String colsiz="";
		String colsca="";
		for (int i = 0; i < colnames.length; i++) {
			colsiz = colSizes[i]<=0? "" : (colScale[i]<=0? "("+colSizes[i]+")" : "("+colSizes[i]+","+colScale[i]+")");
			sb.append("\t" + colnames[i].toUpperCase() +"	"+colTypes[i].toUpperCase()+ colsiz+"\r\n");
		}
		//增加日期
		sb.append(" * @author "+author+" "+this.strDate+"\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" + firstUpperCase(benFieldName[i]) + "("
					+ benClassName[i] + " " + benFieldName[i]
					+ "){\r\n");
			sb.append("\t\tthis." + benFieldName[i] + "=" + benFieldName[i] + ";\r\n");
			sb.append("\t}\r\n");
			//
			sb.append("\tpublic " + benClassName[i] + " get"
					+ firstUpperCase(benFieldName[i]) + "(){\r\n");
			sb.append("\t\treturn " + benFieldName[i] + ";\r\n");
			sb.append("\t}\r\n");
		}
	}

	/**
	 * 解析輸出屬性
	 * 
	 * @return
	 */
	private void processAllAttrs(StringBuffer sb) {
		sb.append("\tprivate static final long serialVersionUID = 1L;\r\n");
		for (int i = 0; i < colnames.length; i++) {
			sb.append("\tprivate " + benClassName[i] + " "
					+ benFieldName[i] + ";\r\n");
		}
		sb.append("\r\n");
	}

	/**
	 * 把輸入字符串的首字母改成大寫,用作Bean的類名,方法名等.
	 */
	private String firstUpperCase(String name) {
		char[] ch = name.toCharArray();
		if (ch[0] >= 'a' && ch[0] <= 'z') {
			ch[0] = (char) (ch[0] - 32);
		}
		return new String(ch);
	}
	
	/**
	 * 數據庫列名轉換成java規範的名字(當然也可以不轉).
	 * 處理列名,把空格下劃線'_'去掉,同時把下劃線後的首字母大寫
	 * 要是整個列在3個字符及以內,則去掉'_'後,不把"_"後首字母大寫.
	 */
	private String toJavaName(String name) {
		char[] ch = name.toCharArray();
		char c ='a';
		if(ch.length>3){
			for(int j=0;j <ch.length; j++){
				c = ch[j];
				if(c == '_'){
					if (ch[j+1]>= 'a' && ch[j+1] <= 'z') {
						ch[j+1]=(char) (ch[j+1]-32);
					}
				}
			}
		}
		String str = new String(ch);
		str = str.replaceAll("_", "");
		return str;
	}

	/**
	 * Sybase
	 */
	private String sybaseTypeToJavaType(String sqlType, int size, int scale) {
		if (sqlType.equals("int")
				|| sqlType.equals("bit")
				|| sqlType.equals("tinyint")
				|| sqlType.equals("smallint")
				) {
			return this.sINTEGER;
		} else if (sqlType.equals("bigint")) {
			return this.sLONG;
		} else if (sqlType.equals("float")
				|| sqlType.equals("float precision")
				|| sqlType.equals("double")
				|| sqlType.equals("double precision")
				|| sqlType.equals("money")
				|| sqlType.equals("smallmoney")) {
			return this.sBIGDECIMAL;
		}else if (sqlType.equals("number")
				||sqlType.equals("decimal")
				|| sqlType.equals("numeric")
				|| sqlType.equals("real")) {
			return scale==0? (size<10? this.sINTEGER : this.sLONG) : this.sBIGDECIMAL;
		}else if (sqlType.equals("varchar")
				|| sqlType.equals("varchar2")
				|| sqlType.equals("char")
				|| sqlType.equals("nvarchar")
				|| sqlType.equals("nchar")) {
			return this.sSTRING;
		} else if (sqlType.equals("datetime")
				|| sqlType.equals("date")) {
			return this.sDATE;
		}else {
			return this.sOBJECT;
		}
	}

	/**
	 * Oracle
	 */
	private String oracleTypeToJavaType(String sqlType, int size, int scale) {
		if (sqlType.equals("integer")) {
			return this.sINTEGER;
		} else if (sqlType.equals("long")) {
			return this.sLONG;
		} else if (sqlType.equals("float")
				|| sqlType.equals("float precision")
				|| sqlType.equals("double")
				|| sqlType.equals("double precision")) {
			return this.sBIGDECIMAL;
		}else if (sqlType.equals("number")
				||sqlType.equals("decimal")
				|| sqlType.equals("numeric")
				|| sqlType.equals("real")) {
			return scale==0? (size<10? this.sINTEGER : this.sLONG) : this.sBIGDECIMAL;
		}else if (sqlType.equals("varchar")
				|| sqlType.equals("varchar2")
				|| sqlType.equals("char")
				|| sqlType.equals("nvarchar")
				|| sqlType.equals("nchar")) {
			return this.sSTRING;
		} else if (sqlType.equals("datetime")
				|| sqlType.equals("date")
				|| sqlType.startsWith("timestamp")) {
			return this.sDATE;
		}else {
			return this.sOBJECT;
		}
	}

	//================================生成Serivce部分======================================
	
	/**
	 * 解析處理(生成Service接口代碼)
	 */
	private void builderServiceCode() {
		String faceName = "I"+this.beanName+"Service";
		String implName = this.beanName+"ServicePojoImpl";
		String content = builderServiceInterface(faceName, implName);
		this.fileWriter(faceName, content);
		//
		content = builderServicePojoImpl(faceName, implName);
		this.fileWriter(implName, content);
	}
	/**
	 * 生成Service接口代碼)
	 */
	private String builderServiceInterface(String interfaceName, String implName) {
		StringBuffer sb = new StringBuffer();
		sb.append("\r\nimport java.io.Serializable;\r\n");
		sb.append("import java.util.*;\r\n");
		sb.append("\r\nimport com.wasion.commons.dto.SupDto;\r\n");
		sb.append("import com.wasion.framework.service.IBaseService;\r\n");
		if(this.isCreateBatchMethod){
			sb.append("import com.wasion.framework.service.IBatchService;\r\n");
		}
		//增加類說明
		sb.append("\r\n/** \r\n");
		sb.append(" * "+tablename+"\r\n");
		sb.append(" * @author "+author+" "+this.strDate+"\r\n");
		sb.append(" */\r\n");
		//類聲明
		if(this.isCreateBatchMethod){
			sb.append("public interface " + interfaceName + " extends IBaseService<"+this.beanName+", SupDto>"+ ", IBatchService<"+this.beanName+", SupDto> {\r\n");
		}else{
			sb.append("public interface " + interfaceName + " extends IBaseService<"+this.beanName+", SupDto> {\r\n");
		}
		sb.append("\r\n");
		sb.append("\t//demo: public abstract List<"+this.beanName+"> findAll(String sqlExpression, SupDto p);");
		sb.append("\r\n");
		sb.append("}\r\n");
		//System.out.println(sb.toString());
		return sb.toString();

	}
	/**
	 * 生成Service的Pojo實現代碼)
	 */
	private String builderServicePojoImpl(String interfaceName, String implName) {
		StringBuffer sb = new StringBuffer();
		sb.append("\r\nimport java.io.Serializable;\r\n");
		sb.append("import java.util.*;\r\n");
		sb.append("\r\nimport com.wasion.commons.dto.SupDto;\r\n");
		sb.append("\r\n");
		//增加類說明
		sb.append("\r\n/** \r\n");
		sb.append(" * "+tablename+"\r\n");
		sb.append(" * @author "+author+" "+this.strDate+"\r\n");
		sb.append(" */\r\n");
		//類聲明
		sb.append("public class " + implName + " implements "+interfaceName+" {\r\n");
		builderServicePojoFieldAndMethod(sb);
		//
		sb.append("}\r\n");
		//System.out.println(sb.toString());
		return sb.toString();

	}
	/**
	 * 組裝Service接口Pojo實現類屬性與方法代碼
	 * @return
	 */
	private void builderServicePojoFieldAndMethod(StringBuffer sb) {
		String faceName = "I"+this.beanName+"Dao";
		sb.append("\r\n");
		sb.append("\tprivate "+faceName+" dao;\r\n");
		sb.append("\r\n");
		sb.append("\t/** spring in */\r\n");
		sb.append("\tpublic "+faceName+" getDao() {\r\n\t\treturn dao;\r\n\t}\r\n");
		sb.append("\tpublic void setDao("+faceName+" dao) {\r\n\t\tthis.dao = dao;\r\n\t}\r\n");
		sb.append("\r\n");
		//方法,基本操作方法 create,delete,update,isExist,findAll(條件)
		sb.append("\tpublic "+beanName+" create("+beanName+" entity, SupDto p) {\r\n\t\treturn this.dao.create(entity, p);\r\n\t}\r\n");
		sb.append("\tpublic boolean delete("+beanName+" entity, SupDto p) {\r\n\t\treturn this.dao.delete(entity, p);\r\n\t}\r\n");
		sb.append("\tpublic "+beanName+" read("+beanName+" entity, SupDto p) {\r\n\t\treturn this.dao.read(entity, p);\r\n\t}\r\n");
		sb.append("\tpublic boolean update("+beanName+" entity, SupDto p) {\r\n\t\treturn this.dao.update(entity, p);\r\n\t}\r\n");
		sb.append("\tpublic List<"+beanName+"> findAll(String sqlExpression, SupDto p) {\r\n\t\treturn this.dao.findAll(sqlExpression, p);\r\n\t}\r\n");
		if(this.isCreateBatchMethod){
			sb.append("\r\n");
			sb.append("\tpublic boolean createBatch(List<"+beanName+"> entities, SupDto p) {\r\n\t\treturn this.dao.createBatch(entities, p);\r\n\t}\r\n");
			sb.append("\tpublic boolean deleteBatch(List<"+beanName+"> entities, SupDto p) {\r\n\t\treturn this.dao.deleteBatch(entities, p);\r\n\t}\r\n");
			sb.append("\tpublic boolean updateBatch(List<"+beanName+"> entities, SupDto p) {\r\n\t\treturn this.dao.updateBatch(entities, p);\r\n\t}\r\n");
			sb.append("\tpublic boolean updateOrInsertBatch(List<"+beanName+"> entities, SupDto p) {\r\n\t\treturn this.dao.updateOrInsertBatch(entities, p);\r\n\t}\r\n");
		}
	}
	
	
	//================================生成  Dao  部分======================================
	
	/**
	 * 解析處理(生成 Dao代碼)
	 */
	private void builderDaoCode() {
		String faceName = "I"+this.beanName+"Dao";
		String implName = this.beanName+"DaoJdbcImpl";
		String content = builderDaoInterface(faceName, implName);
		this.fileWriter(faceName, content);
		//
		content = builderDaoPojoImpl(faceName, implName);
		this.fileWriter(implName, content);
	}
	/**
	 * 生成Dao接口代碼)
	 */
	private String builderDaoInterface(String interfaceName, String implName) {
		StringBuffer sb = new StringBuffer();
		sb.append("\r\nimport java.io.Serializable;\r\n");
		sb.append("import java.util.*;\r\n");
		sb.append("\r\nimport com.wasion.commons.dto.SupDto;\r\n");
		sb.append("import com.wasion.framework.dao.IBaseDao;\r\n");
		if(this.isCreateBatchMethod){
			sb.append("import com.wasion.framework.dao.IBatchDao;\r\n");
		}
		//增加類說明
		sb.append("\r\n/** \r\n");
		sb.append(" * "+tablename+"\r\n");
		sb.append(" * @author "+author+" "+this.strDate+"\r\n");
		sb.append(" */\r\n");
		//類聲明
		if(this.isCreateBatchMethod){
			sb.append("public interface " + interfaceName + " extends IBaseDao<"+this.beanName+", SupDto>" + ", IBatchDao<"+this.beanName+", SupDto> {\r\n");
		}else{
			sb.append("public interface " + interfaceName + " extends IBaseDao<"+this.beanName+", SupDto> {\r\n");
		}
		sb.append("\r\n");
		sb.append("\t//demo: public abstract List<"+this.beanName+"> findAll(String sqlExpression, SupDto p);");
		sb.append("\r\n");
		sb.append("}\r\n");
		//System.out.println(sb.toString());
		return sb.toString();

	}
	/**
	 * 生成Dao的Jdbc實現代碼)
	 */
	private String builderDaoPojoImpl(String interfaceName, String implName) {
		StringBuffer sb = new StringBuffer();
		//增加引用
		sb.append("\r\nimport java.util.*;\r\n");
		sb.append("import java.math.*;\r\n");
		sb.append("\r\n");
		sb.append("import org.apache.commons.logging.Log;\r\n");
		sb.append("import org.apache.commons.logging.LogFactory;\r\n");
		sb.append("\r\n");
		sb.append("import com.wasion.commons.dto.SupDto;\r\n");
		sb.append("import com.wasion.commons.util.JdbcDataUtils;\r\n");
		sb.append("import com.wasion.commons.util.SqlCacheUnits;\r\n");
		sb.append("import com.wasion.commons.util.SqlStringUnits;\r\n");
		sb.append("\r\n");
		sb.append("import com.wasion.framework.dao.BaseMdbDaoSupport;\r\n");
		sb.append("\r\n");
		//增加類說明
		sb.append("\r\n/** \r\n");
		sb.append(" * "+tablename+"\r\n");
		sb.append(" * @author "+author+" "+this.strDate+"\r\n");
		sb.append(" */\r\n");
		//類聲明
		sb.append("public class " + implName + " extends BaseMdbDaoSupport implements "+interfaceName+" {\r\n");
		sb.append("\tprivate Log logger = LogFactory.getLog(this.getClass());\r\n");
		sb.append("\tprivate SqlStringUnits stool = new SqlStringUnits();\r\n");
		sb.append("\tprivate JdbcDataUtils jtool = new JdbcDataUtils();\r\n");
		sb.append("\tprivate String table = \""+tablename+"\";\r\n");
		sb.append("\tprivate String name = \""+tablename+"\";\r\n");
		sb.append("\tprivate final int BATCH_SIZE=500;\r\n");
		
		daoMethodFindAll_1(sb);
		daoMethodRead(sb);
		daoMethodInsert(sb);
		daoMethodDelete_1(sb);
		daoMethodUpdate(sb);
		
		if(isCreateBatchMethod){
			this.daoMethodInsertBatch(sb);
			this.daoMethodDeleteBatch(sb);
			this.daoMethodUpdateBatch(sb);
			this.daoMethodUpdateOrInsertBatch(sb);
		}
		
		sb.append("\r\n\r\n\t//-------------------------Parameters CODE------------------------- \r\n\r\n");
		
		daoMethodProcessInsertParm(sb);
		daoMethodProcessDeleteParm(sb);
		daoMethodProcessUpdateParm(sb);
		daoMethodProcessUpdateOrInsertParm(sb);
		
		daoMethodGetColumnString(sb);
		sb.append("\r\n");
		sb.append("}\r\n");
		return sb.toString();

	}
	
	//----------生成  Dao Template 部分----------
	
	/**
	 * 生成Dao的Jdbc實現: findAll 1對象.
	 */
	private void daoMethodFindAll_1(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** findAll row */\r\n");
		sb.append("\tpublic List<"+beanName+"> findAll(String sqlExpression, SupDto p) {\r\n");
		//e2->>
		sb.append("\t\tif(sqlExpression == null) return null;\r\n");
		sb.append("\t\tString tablename = this.getTableName(p, this.table);\r\n");
		sb.append("\t\tString sqlNote = this.getSqlNote(p, this.name);\r\n");
		sb.append("\t\tString strSql = null;\r\n");
		sb.append("\t\tstrSql =\" SELECT \"+this.getColumnString()+\" FROM \"+ tablename+\" \"+sqlExpression;\r\n");
		//e1->>
		sb.append("\t\treturn this.getJdbcDaoSupport(p).query(strSql, "+beanName+".class, sqlNote);\r\n\t}\r\n");
	}
	
	/**
	 * 生成Dao的Jdbc實現: Read 對象.
	 */
	private void daoMethodRead(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** read row */\r\n");
		sb.append("\tpublic "+beanName+" read("+beanName+" entity, SupDto p) {\r\n");
		//e2->>
		sb.append("\t\tif(entity == null) return null;\r\n");
		sb.append("\t\tString tablename = this.getTableName(p, this.table);\r\n");
		sb.append("\t\tString sqlNote = this.getSqlNote(p, this.name);\r\n");
		sb.append("\t\tString strSql = null;\r\n");
		sb.append("\t\tstrSql =\" SELECT \"+this.getColumnString()+\" FROM \"+tablename+\" WHERE ID =1.....\";\r\n");
		sb.append("\t\t//TODO ADD WHERE CODE......\r\n");
		//e1->>
		sb.append("\t\treturn this.getJdbcDaoSupport(p).querySingle(strSql, "+beanName+".class, sqlNote);\r\n\t}\r\n");
	}
	
	/**
	 * 生成Dao的Jdbc實現: insertEntity 插入對象.
	 */
	private void daoMethodInsert(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** create row */\r\n");
		sb.append("\tpublic "+beanName+" create("+beanName+" entity, SupDto p) {\r\n");
		//e2->>
		sb.append("\t\tif(entity == null) return null;\r\n");
		sb.append("\t\tString tablename = this.getTableName(p, this.table);\r\n");
		sb.append("\t\tString sqlNote = this.getSqlNote(p, this.name);\r\n");
		sb.append("\t\tString strSql = null;\r\n");
		sb.append("\t\tstrSql =\" INSERT INTO \"+ tablename +\" (\"+this.getColumnString()+\") \"+\r\n");
		//e3->>
		sb.append("\t\t\t\" VALUES(");
		String s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1)%20==0){
					s=s+"?,\"+\r\n\t\t\t\"";
				}else{
					s=s+"?,";
				}
			}else{
				s=s+"?";
			}
		}
		sb.append(s+")\";\r\n");
		//e2->>
		sb.append("\t\tint rs = this.getJdbcDaoSupport(p).update(strSql, this.processInsertParm(entity), sqlNote);\r\n");
		//e1->>
		sb.append("\t\treturn rs >0 ? entity : null;\r\n\t}\r\n");
	}
	
	/**
	 * 生成Dao的Jdbc實現: deleteEntityTemplate 刪除對象模板.
	 */
	private void daoMethodDelete_1(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** delete row */\r\n");
		sb.append("\tpublic boolean delete("+beanName+" entity, SupDto p) {\r\n");
		//e2->>
		sb.append("\t\tif(entity == null) return false;\r\n");
		sb.append("\t\tString tablename = this.getTableName(p, this.table);\r\n");
		sb.append("\t\tString sqlNote = this.getSqlNote(p, this.name);\r\n");
		sb.append("\t\tString strSql = null;\r\n");
		sb.append("\t\tstrSql =\" DELETE \"+ tablename +\r\n");
		//e3->>
		sb.append("\t\t\t\" WHERE ID =1..... \";\r\n");
		sb.append("\t\t//TODO ADD WHERE CODE......\r\n");
		//e2->>
		sb.append("\t\tint rs = this.getJdbcDaoSupport(p).update(strSql, sqlNote);\r\n");
		//e1->>
		sb.append("\t\treturn rs >= 0 ? true : false;\r\n\t}\r\n");
	}
	
	/**
	 * 生成Dao的Jdbc實現: updateEntityTemplate 修改對象模板.
	 */
	private void daoMethodUpdate(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** update row */\r\n");
		sb.append("\tpublic boolean update("+beanName+" entity, SupDto p) {\r\n");
		//e2->>
		sb.append("\t\tif(entity == null) return false;\r\n");
		sb.append("\t\tString tablename = this.getTableName(p, this.table);\r\n");
		sb.append("\t\tString sqlNote = this.getSqlNote(p, this.name);\r\n");
		sb.append("\t\tString strSql = null;\r\n");
		sb.append("\t\tstrSql =\" UPDATE \"+ tablename +\" SET\"+\r\n");
		//e3->>
		sb.append("\t\t\t\" ");
		String s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1)%10==0){
					s=s+colnames[i]+"=?,\"+\r\n\t\t\t\" ";
				}else{
					s=s+colnames[i]+"=?,";
				}
			}else{
				s=s+colnames[i]+"=?";
			}
		}
		sb.append(s.toUpperCase()+"\"+\r\n");
		sb.append("\t\t\t\" WHERE ID =?..... \";\r\n");
		//e2->>
		sb.append("\t\t//TODO ADD WHERE CODE......\r\n");
		sb.append("\t\tint rs = this.getJdbcDaoSupport(p).update(strSql, this.processUpdateParm(entity), sqlNote);\r\n");
		//e1->>
		sb.append("\t\treturn rs >= 0 ? true : false;\r\n\t}\r\n");
	}

	/**
	 * 生成Dao的Jdbc實現: insertBatch 插入對象.
	 */
	private void daoMethodInsertBatch(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** createBatch row */\r\n");
		sb.append("\tpublic boolean createBatch(List<"+beanName+"> entities, SupDto p) {\r\n");
		//e2->>
		sb.append("\t\tif(entities == null || entities.size()==0) return true;\r\n");
		sb.append("\t\tString tablename = this.getTableName(p, this.table);\r\n");
		sb.append("\t\tString sqlNote = this.getSqlNote(p, this.name);\r\n");
		sb.append("\t\tString strSql = null;\r\n");
		sb.append("\t\tstrSql =\" INSERT INTO \"+ tablename +\" (\"+this.getColumnString()+\") \"+\r\n");
		//e3->>
		sb.append("\t\t\t\" VALUES(");
		String s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1)%20==0){
					s=s+"?,\"+\r\n\t\t\t\"";
				}else{
					s=s+"?,";
				}
			}else{
				s=s+"?";
			}
		}
		sb.append(s+")\";\r\n");
		//e2->>batch
		sb.append("\t\tboolean bResult = false;\r\n");
		sb.append("\t\tList<Object[]> args = new ArrayList<Object[]>();\r\n");
		sb.append("\t\tint len = entities.size();\r\n");
		sb.append("\t\tint i = 0;\r\n");
		sb.append("\t\tfor("+beanName+" e : entities){\r\n");
		//e3->>
		sb.append("\t\t\targs.add( processInsertParm(e) );\r\n");
		sb.append("\t\t\ti++;\r\n");
		sb.append("\t\t\tif ((i % BATCH_SIZE == 0) || i == len) {\r\n");
		//e4->>
		sb.append("\t\t\t\tint[] rs = this.getJdbcDaoSupport(p).batchUpdate(strSql, args, sqlNote);\r\n");
		sb.append("\t\t\t\targs.clear();\r\n");
		sb.append("\t\t\t\tif(logger.isDebugEnabled()){\r\n");
		//e5->>
		sb.append("\t\t\t\t\tlogger.debug(\"[正在批量提交數據]: \"+i+\"/\"+len+\", BY \"+name);\r\n");
		//e4
		sb.append("\t\t\t\t}\r\n");
		sb.append("\t\t\t\tif(rs == null){	bResult = false; break; }\r\n");
		sb.append("\t\t\t\telse{ bResult = true; }\r\n");
		//e3
		sb.append("\t\t\t}\r\n");
		//e2 batch
		sb.append("\t\t}\r\n");
		sb.append("\t\tlogger.info(\"[完成批量提交數據]: \"+i+\"/\"+len+\", BY \"+name);\r\n");
		//e2,e1->>
		sb.append("\t\treturn bResult;\r\n\t}\r\n");
	}
	
	/**
	 * 生成Dao的Jdbc實現: deleteBatch 插入對象.
	 */
	private void daoMethodDeleteBatch(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** deleteBatch row */\r\n");
		sb.append("\tpublic boolean deleteBatch(List<"+beanName+"> entities, SupDto p) {\r\n");
		//e2->>
		sb.append("\t\tif(entities == null || entities.size()==0) return true;\r\n");
		sb.append("\t\tString tablename = this.getTableName(p, this.table);\r\n");
		sb.append("\t\tString sqlNote = this.getSqlNote(p, this.name);\r\n");
		sb.append("\t\tString strSql = null;\r\n");
		sb.append("\t\tstrSql =\" DELETE \"+ tablename +\" WHERE ID =?..... \";\r\n");
		//e2->>
		sb.append("\t\t//TODO ADD WHERE CODE......\r\n");
		//e2->>batch
		sb.append("\t\tboolean bResult = false;\r\n");
		sb.append("\t\tList<Object[]> args = new ArrayList<Object[]>();\r\n");
		sb.append("\t\tint len = entities.size();\r\n");
		sb.append("\t\tint i = 0;\r\n");
		sb.append("\t\tfor("+beanName+" e : entities){\r\n");
		//e3->>
		sb.append("\t\t\targs.add( processDeleteParm(e) );\r\n");
		sb.append("\t\t\ti++;\r\n");
		sb.append("\t\t\tif ((i % BATCH_SIZE == 0) || i == len) {\r\n");
		//e4->>
		sb.append("\t\t\t\tint[] rs = this.getJdbcDaoSupport(p).batchUpdate(strSql, args, sqlNote);\r\n");
		sb.append("\t\t\t\targs.clear();\r\n");
		sb.append("\t\t\t\tif(logger.isDebugEnabled()){\r\n");
		//e5->>
		sb.append("\t\t\t\t\tlogger.debug(\"[正在批量提交數據]: \"+i+\"/\"+len+\", BY \"+name);\r\n");
		//e4
		sb.append("\t\t\t\t}\r\n");
		sb.append("\t\t\t\tif(rs == null){	bResult = false; break; }\r\n");
		sb.append("\t\t\t\telse{ bResult = true; }\r\n");
		//e3
		sb.append("\t\t\t}\r\n");
		//e2 batch
		sb.append("\t\t}\r\n");
		sb.append("\t\tlogger.info(\"[完成批量提交數據]: \"+i+\"/\"+len+\", BY \"+name);\r\n");
		//e2,e1->>
		sb.append("\t\treturn bResult;\r\n\t}\r\n");
	}
	
	
	/**
	 * 生成Dao的Jdbc實現: updateBatch 插入對象.
	 */
	private void daoMethodUpdateBatch(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** updateBatch row */\r\n");
		sb.append("\tpublic boolean updateBatch(List<"+beanName+"> entities, SupDto p) {\r\n");
		//e2->>
		sb.append("\t\tif(entities == null || entities.size()==0) return true;\r\n");
		sb.append("\t\tString tablename = this.getTableName(p, this.table);\r\n");
		sb.append("\t\tString sqlNote = this.getSqlNote(p, this.name);\r\n");
		sb.append("\t\tString strSql = null;\r\n");
		sb.append("\t\tstrSql =\" UPDATE \"+ tablename +\" SET\"+\r\n");
		//e3->>
		sb.append("\t\t\t\" ");
		String s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1)%10==0){
					s=s+colnames[i]+"=?,\"+\r\n\t\t\t\" ";
				}else{
					s=s+colnames[i]+"=?,";
				}
			}else{
				s=s+colnames[i]+"=?";
			}
		}
		sb.append(s.toUpperCase()+"\"+\r\n");
		sb.append("\t\t\t\" WHERE ID =?..... \";\r\n");
		//e2->>
		sb.append("\t\t//TODO ADD WHERE CODE......\r\n");
		//e2->>batch
		sb.append("\t\tboolean bResult = false;\r\n");
		sb.append("\t\tList<Object[]> args = new ArrayList<Object[]>();\r\n");
		sb.append("\t\tint len = entities.size();\r\n");
		sb.append("\t\tint i = 0;\r\n");
		sb.append("\t\tfor("+beanName+" e : entities){\r\n");
		//e3->>
		sb.append("\t\t\targs.add( processUpdateParm(e) );\r\n");
		sb.append("\t\t\ti++;\r\n");
		sb.append("\t\t\tif ((i % BATCH_SIZE == 0) || i == len) {\r\n");
		//e4->>
		sb.append("\t\t\t\tint[] rs = this.getJdbcDaoSupport(p).batchUpdate(strSql, args, sqlNote);\r\n");
		sb.append("\t\t\t\targs.clear();\r\n");
		sb.append("\t\t\t\tif(logger.isDebugEnabled()){\r\n");
		//e5->>
		sb.append("\t\t\t\t\tlogger.debug(\"[正在批量提交數據]: \"+i+\"/\"+len+\", BY \"+name);\r\n");
		//e4
		sb.append("\t\t\t\t}\r\n");
		sb.append("\t\t\t\tif(rs == null){	bResult = false; break; }\r\n");
		sb.append("\t\t\t\telse{ bResult = true; }\r\n");
		//e3
		sb.append("\t\t\t}\r\n");
		//e2 batch
		sb.append("\t\t}\r\n");
		sb.append("\t\tlogger.info(\"[完成批量提交數據]: \"+i+\"/\"+len+\", BY \"+name);\r\n");
		//e2,e1->>
		sb.append("\t\treturn bResult;\r\n\t}\r\n");
	}
	

	/**
	 * 生成Dao的Jdbc實現: updateOrInsert 插入對象.
	 */
	private void daoMethodUpdateOrInsertBatch(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** updateOrInsertBatch row */\r\n");
		sb.append("\tpublic boolean updateOrInsertBatch(List<"+beanName+"> entities, SupDto p) {\r\n");
		//e2->>
		sb.append("\t\tif(entities==null || entities.size()==0) return true;\r\n");
		sb.append("\t\tString tablename = this.getTableName(p, this.table);\r\n");
		sb.append("\t\tString sqlNote = this.getSqlNote(p, this.name);\r\n");
		sb.append("\t\tString sqlUp = null;\r\n");
		sb.append("\t\tString sqlIn = null;\r\n");
		//
		// insert sql
		String s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1)%10==0){
					s=s+colnames[i]+",\"+\r\n\t\t\t\" ";
				}else{
					s=s+colnames[i]+",";
				}
			}else{
				s=s+colnames[i];
			}
		}
		sb.append("\t\tsqlIn =\" INSERT INTO \"+ tablename +\" (\"+\r\n");
		//e3->>
		sb.append("\t\t\t\" "+s.toUpperCase()+") \"+\r\n");
		sb.append("\t\t\t\" VALUES(");
		s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1)%20==0){
					s=s+"?,\"+\r\n\t\t\t\"";
				}else{
					s=s+"?,";
				}
			}else{
				s=s+"?";
			}
		}
		sb.append(s+")\";\r\n");
		// update sql
		sb.append("\t\tsqlUp =\" UPDATE \"+ tablename +\" SET\"+\r\n");
		//e3->>
		sb.append("\t\t\t\" ");
		s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1)%10==0){
					s=s+colnames[i]+"=?,\"+\r\n\t\t\t\" ";
				}else{
					s=s+colnames[i]+"=?,";
				}
			}else{
				s=s+colnames[i]+"=?";
			}
		}
		sb.append(s.toUpperCase()+"\"+\r\n");
		sb.append("\t\t\t\" WHERE ID =?..... \";\r\n");
		//e2->>
		sb.append("\t\t//TODO ADD WHERE CODE......\r\n");
		//e2->>batch
		sb.append("\t\tboolean bResult = false;\r\n");
		sb.append("\t\tList<Object[]> args = new ArrayList<Object[]>();\r\n");
		sb.append("\t\tint len = entities.size();\r\n");
		sb.append("\t\tint i = 0;\r\n");
		sb.append("\t\tfor("+beanName+" e : entities){\r\n");
		//e3->>
		sb.append("\t\t\targs.add( processUpdateOrInsertParm(e) );\r\n");
		sb.append("\t\t\ti++;\r\n");
		sb.append("\t\t\tif ((i % BATCH_SIZE == 0) || i == len) {\r\n");
		//e4->>
		sb.append("\t\t\t\tbResult = this.getJdbcDaoSupport(p).batchUpdateOrInsert(sqlUp, sqlIn, args, sqlNote);\r\n");
		sb.append("\t\t\t\targs.clear();\r\n");
		sb.append("\t\t\t\tif(logger.isDebugEnabled()){\r\n");
		//e5->>
		sb.append("\t\t\t\t\tlogger.debug(\"[正在批量提交數據]: \"+i+\"/\"+len+\", BY \"+name);\r\n");
		//e4
		sb.append("\t\t\t\t}\r\n");
		sb.append("\t\t\t\tif(! bResult){ break; }\r\n");
		//e3
		sb.append("\t\t\t}\r\n");
		//e2 batch
		sb.append("\t\t}\r\n");
		sb.append("\t\tlogger.info(\"[完成批量提交數據]: \"+i+\"/\"+len+\", BY \"+name);\r\n");
		//e2,e1->>
		sb.append("\t\treturn bResult;\r\n\t}\r\n");
	}
	
	//------------------------生成  Dao Process 實體處理部分---------------------------
	
	/**
	 * 生成Dao的Jdbc實現: processInsertParm 插入對象參數處理的方法
	 */
	private void daoMethodProcessInsertParm(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** Insert parameters */\r\n");
		sb.append("\tprotected Object[] processInsertParm("+beanName+" e) {\r\n");
		//e2->>
		sb.append("\t\tObject[] parameters = new Object[]{\r\n");
		//e3->>
		sb.append("\t\t\t");
		String s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1) % 5 == 0){
					s=s+"e.get"+firstUpperCase(benFieldName[i])+"(), \r\n\t\t\t";
				}else{
					s=s+"e.get"+firstUpperCase(benFieldName[i])+"(), ";
				}
			}else{
				s=s+"e.get"+firstUpperCase(benFieldName[i])+"()";
			}
		}
		sb.append(s+" };\r\n");
		//e2->>
		sb.append("\t\treturn parameters;\r\n");
		//e1->>
		sb.append("\t}\r\n");
	}
	
	/**
	 * 生成Dao的Jdbc實現: processDeleteParm 修改對象參數處理的方法
	 */
	private void daoMethodProcessDeleteParm(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** Insert parameters */\r\n");
		sb.append("\tprotected Object[] processDeleteParm("+beanName+" e) {\r\n");
		//e2->>
		sb.append("\t\tObject[] parameters = new Object[]{\r\n");
		//e3->>
		sb.append("\t\t\t//TODO ADD WHERE CODE......\r\n");
		sb.append("\t\t\t};\r\n");
		//e2->>
		sb.append("\t\treturn parameters;\r\n");
		//e1->>
		sb.append("\t}\r\n");
	}
	
	/**
	 * 生成Dao的Jdbc實現: processUpdateParm 修改對象參數處理的方法
	 */
	private void daoMethodProcessUpdateParm(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** Insert parameters */\r\n");
		sb.append("\tprotected Object[] processUpdateParm("+beanName+" e) {\r\n");
		//e2->>
		sb.append("\t\tObject[] parameters = new Object[]{\r\n");
		//e3->>
		sb.append("\t\t\t");
		String s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1) % 5 == 0){
					s=s+"e.get"+firstUpperCase(benFieldName[i])+"(), \r\n\t\t\t";
				}else{
					s=s+"e.get"+firstUpperCase(benFieldName[i])+"(), ";
				}
			}else{
				s=s+"e.get"+firstUpperCase(benFieldName[i])+"()";
			}
		}
		sb.append(s+"\r\n");
		sb.append("\t\t\t//TODO ADD WHERE CODE......\r\n");
		sb.append("\t\t\t};\r\n");
		//e2->>
		sb.append("\t\treturn parameters;\r\n");
		//e1->>
		sb.append("\t}\r\n");
	}
	
	/**
	 * 生成Dao的Jdbc實現: processUpdateOrInsertParm 修改對象參數處理的方法
	 */
	private void daoMethodProcessUpdateOrInsertParm(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** Insert parameters */\r\n");
		sb.append("\tprotected Object[] processUpdateOrInsertParm("+beanName+" e) {\r\n");
		//e2->>
		sb.append("\t\tObject[] parameters = new Object[]{\r\n");
		//e3->>
		sb.append("\t\t\t");
		String s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1) % 5 == 0){
					s=s+"e.get"+firstUpperCase(benFieldName[i])+"(), \r\n\t\t\t";
				}else{
					s=s+"e.get"+firstUpperCase(benFieldName[i])+"(), ";
				}
			}else{
				s=s+"e.get"+firstUpperCase(benFieldName[i])+"()";
			}
		}
		sb.append(s+"\r\n");
		sb.append("\t\t\t//TODO ADD WHERE CODE......\r\n");
		sb.append("\t\t\t};\r\n");
		//e2->>
		sb.append("\t\treturn parameters;\r\n");
		//e1->>
		sb.append("\t}\r\n");
	}
	
	
	/**
	 * 生成Dao的Jdbc實現: getColumnString 方法
	 */
	private void daoMethodGetColumnString(StringBuffer sb) {
		sb.append("\r\n");
		sb.append("\t/** "+colnames.length+" Column */\r\n");
		sb.append("\tprotected String getColumnString() {\r\n");
		String s="";
		for (int i = 0; i < colnames.length; i++) {
			if(i<colnames.length-1){
				if((i+1)%10==0){
					s=s+colnames[i]+",\"+\r\n\t\t\t\"";
				}else{
					s=s+colnames[i]+",";
				}
			}else{
				s=s+colnames[i];
			}
		}
		sb.append("\t\tString sqlSql =\" "+s.toUpperCase()+" \";\r\n");
		//e1->>
		sb.append("\t\treturn sqlSql;\r\n\t}\r\n");
	}

	
	public boolean isConvertColName() {
		return isConvertColName;
	}
	public void setConvertColName(boolean isConvertColName) {
		this.isConvertColName = isConvertColName;
	}
	public boolean isOnlyCreateBean() {
		return onlyCreateBean;
	}
	public void setOnlyCreateBean(boolean onlyCreateBean) {
		this.onlyCreateBean = onlyCreateBean;
	}
	public boolean isCreateBatchMethod() {
		return isCreateBatchMethod;
	}

	public void setCreateBatchMethod(boolean isCreateBatchMethod) {
		this.isCreateBatchMethod = isCreateBatchMethod;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//HD_ELEC_D,M_DEPT,M_TRANS_STATION,ALARM_EVENTS,SMSC_RD_ALARM_EVENT
		TableToSerivceByArchUtils t = new TableToSerivceByArchUtils();
		t.setConvertColName(false);
		t.setCreateBatchMethod(true);
		t.setOnlyCreateBean(false);
		//
		t.execute("INTERFACE_ID_MAPPING");
		
	}

}

代碼太長了, 生成的類由看下一節

關於數據源的問題, 請自己處理, 這個不是核心代碼.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章