ibatis自动生成xml(SqlMapUtilOracle)

package com.piend.rjtserver.common.util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.piend.rjtserver.common.connection.Oracle;

public class SqlMapUtilOracle {

	public static void main(String[] args) {
		File file=new File("D:\\IbatisXml");
		File file1=new File("D:\\IbatisXml\\impl");
		if(!file.exists()){
			file.mkdir();
		}
		if(!file1.exists()){
			file1.mkdir();
		}
		Connection connection= Oracle.getConnection();
		List<String> tableNames = (List<String>) getTablesInSchema("RJT",connection);//DBO_FWERP dbo
		try {
			//生成xml
			writeXml(tableNames,file,connection);
			writeJava(tableNames,file,file1);
			try {
				if (connection != null) {
					connection.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void writeXml(List<String> tableNames,File file,Connection connection)throws IOException {
		FileWriter fw = null;
		StringBuffer sb = new StringBuffer();
		for (String tableName : tableNames) {
			fw = new FileWriter(new File(file,upStringOne(tableName)+ "-SqlMap.xml"));
			fw.write(getSqlMap(getColumnInfoesInTable(tableName,connection),tableName, sb));
			fw.close();
			sb.delete(0, sb.length());
		}
		
	}
	public static void writeJava(List<String> tableNames,File file,File impfile)throws IOException {
		FileWriter fw = null;
		StringBuffer sb = new StringBuffer();
		String interfaceString="";
		String implSTring="";
		for (String tableName : tableNames) {
			interfaceString="I"+upStringOne(tableName)+ "Service";
		    implSTring=upStringOne(tableName)+ "ServiceImpl";
			fw = new FileWriter(new File(file,interfaceString+".java"));
			sb.append("package com.piend.rjtcontacts.service;\n");
			sb.append("/**\n*\n* @author TangChao\n*\n*/\n");
			sb.append("public interface "+interfaceString+"  extends IbaseService{\n\n}");
			fw.write(sb.toString());
			fw.close();
			sb.delete(0, sb.length());
			//imp
			fw = new FileWriter(new File(impfile,implSTring+".java"));
			sb.append("package com.piend.rjtcontacts.service.impl;\n");
			sb.append("import org.springframework.stereotype.Service;\n");
		    sb.append("import com.piend.rjtcontacts.service."+interfaceString+";\n");
		    
			sb.append("/**\n*\n* @author TangChao\n*\n*/\n");
			sb.append("@Service(\""+OnexiaoXie(upStringOne(tableName))+"Service\")\n");
			
			sb.append("public class "+implSTring+" extends BaseServiceImpl implements "+interfaceString+"{\n\n");
			sb.append("public "+implSTring+"() {\n \tthis.namespace=\""+upStringOne(tableName)+"\";\n}\n\n");
			sb.append("}");
			fw.write(sb.toString());
			fw.close();
			sb.delete(0, sb.length());
		}
		
	}
	
	private static String getSqlMap(List<String> columnNames, String table,StringBuffer sb) {
		int size=columnNames.size();
		String tableName=upStringOne(table);
		sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
		sb.append("<!DOCTYPE sqlMap PUBLIC \"-//iBATIS.com//DTD SQL Map 2.0//EN\" \"../dtd/sql-map-2.dtd\">\n");
		
		sb.append("<!--"+tableName+":增删改查 -->\n");
		sb.append("<sqlMap namespace=\""+tableName+"\">\n");
		
		sb.append("<!--"+tableName+":动态查询条件 -->\n");
		sb.append("<sql id=\"dynamicQuery\">\n");
		sb.append("<dynamic prepend=\"WHERE\">\n");
        for (int i = 0; i < size; i++) {
			sb.append("<isNotEmpty prepend=\" AND \" property=\""+setPropertyName(columnNames.get(i))+"\">");
			sb.append("t."+columnNames.get(i)+"=#"+setPropertyName(columnNames.get(i))+"#");
			sb.append("</isNotEmpty>\n");
		}
        sb.append("</dynamic>\n");
		sb.append("</sql>\n");
		
		sb.append("<!--"+tableName+":添加功能 -->\n");
		sb.append("<insert id=\"insert\">\n");
		sb.append("INSERT INTO "+table+"\n");
		sb.append("(");
		for (int i = 1; i < size-1; i++) {
			sb.append(columnNames.get(i)+",");
			if(i%10==0){
				sb.append("\n");
			}
		}
		sb.append(columnNames.get(size-1));
		sb.append(")\n");
		sb.append("VALUES");
		sb.append("(");
		for (int i = 1; i < size-1; i++) {
			sb.append("#"+setPropertyName(columnNames.get(i))+"#,");
			if(i%10==0){
				sb.append("\n");
			}
		}
		sb.append("#"+setPropertyName(columnNames.get(size-1))+"#");
		sb.append(")\n");		
		sb.append("</insert>\n");
		
		
		sb.append("<!--"+tableName+": 删除功能 -->\n");
		sb.append("<delete id=\"delete\">\n");
		
        sb.append("DELETE FROM "+table+" WHERE "+columnNames.get(0)+" in($fkeyId$)\n");
		sb.append("</delete>\n");
		
		sb.append("<!--"+tableName+":修改功能 -->\n");
		sb.append("<update id=\"update\">\n");
        sb.append("UPDATE "+table+"\n<dynamic prepend=\"SET\">\n");
        for (int i = 1; i < size; i++) {
			sb.append("<isNotEmpty prepend=\",\" property=\""+setPropertyName(columnNames.get(i))+"\">");
			sb.append(columnNames.get(i)+"=#"+setPropertyName(columnNames.get(i))+"#");
			sb.append("</isNotEmpty>\n");
		}
        sb.append("</dynamic>\n");
		sb.append("WHERE "+columnNames.get(0)+"=#"+setPropertyName(columnNames.get(0))+"#\n");
		sb.append("</update>\n");
		
		sb.append("<!--"+tableName+":通过主键查某一条记录 -->\n");
		sb.append("<select id=\"findById\" resultClass=\"hashmap\">\n");
        sb.append("SELECT * FROM "+table+" WHERE "+columnNames.get(0)+"=#fkeyId# \n");
		sb.append("</select>\n");
		sb.append("<!--Contactbase:传sql字符串查询 -->\n");
		sb.append("<select id=\"querySql\" resultClass=\"hashmap\">\n");
		sb.append("$querySql$\n");
		sb.append("</select>\n");
		
		sb.append("<!--"+tableName+":获取分页总条数 -->\n");
		sb.append("<select  id=\"queryForListCount\" resultClass=\"java.lang.Integer\">\n");
        sb.append("SELECT count(*) FROM "+table+" t \n");
        sb.append("<include refid=\"dynamicQuery\" />\n"); 
		sb.append("</select>\n");
		sb.append("<!--"+tableName+":获取分页结果集 -->\n");
		sb.append("<select id=\"queryForList\" resultClass=\"hashmap\">\n");
		sb.append("SELECT * FROM ( SELECT TEMP.*, ROWNUM RN FROM (\n");
		sb.append("<!-- sql部分开始 -->\n");
		sb.append("select * from "+tableName+" t \n");
		sb.append("<include refid=\"dynamicQuery\" />\n");
		sb.append("<isNotEmpty prepend=\" ORDER BY \" property=\"oderByKey\">$oderByKey$</isNotEmpty>\n");
		sb.append("<!-- sql结束 -->\n");
		sb.append(") TEMP WHERE  #endNum#>= ROWNUM) WHERE RN >= #startNum#\n");
		sb.append("</select>\n");
		sb.append("\n</sqlMap>");
		return sb.toString();
	}

	/**
	 * 取得某Schema下所有表名
	 * 
	 * @param schema
	 * @return
	 */

	public static List<String> getTablesInSchema(String schema,	Connection	connection) {
		//orcale: select table_name from user_tables
		//mySql:Select table_name from INFORMATION_SCHEMA.TABLES
		List<String> retval = new ArrayList<String>();
		ResultSet resultSet=null;
		DatabaseMetaData dbmd=null;
		try {
			dbmd= connection.getMetaData();
			String[] types = { "TABLE" };
			resultSet = dbmd.getTables(null, null, "%", types);
			while (resultSet.next()) {
				String tableName = resultSet.getString(3);
				String tableSchema = resultSet.getString(2);
				if (tableSchema.equals(schema)) {
					System.out.println("tableName:"+tableName);
					retval.add(tableName.toLowerCase());
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(resultSet!=null){
					resultSet.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return retval;
	}

	/**
	 * 取得某表下的所有字段信息
	 * 
	 * @param table
	 * @return
	 */
	public static List<String> getColumnInfoesInTable(String table,Connection connection) {
		//mysql:select table_schema,table_name,column_name from information_schema.COLUMNS  where table_schema='tongzhan1';
		//orcale select table_name,column_name from user_tab_columns
		List<String> retval = new ArrayList<String>();
		Statement stmt = null;
		ResultSet rs=null;
		try {
			stmt=connection.createStatement();
			rs = stmt.executeQuery("SELECT * FROM " + table);
			ResultSetMetaData rsmd = rs.getMetaData();
			int numColumns = rsmd.getColumnCount();
			for (int i = 1; i < numColumns + 1; i++) {
				retval.add(rsmd.getColumnName(i));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (stmt != null) {
					stmt.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return retval;
	}

	public static String upStringOne(String str) {
		String newTableName=str.replaceFirst(str.substring(0, 1), str.substring(0, 1).toUpperCase());
		if(str.contains("_")){
			String []arrSt=newTableName.split("_");
			for (int i = 1; i < arrSt.length; i++) {
				arrSt[i]=arrSt[i].replaceFirst(arrSt[i].substring(0, 1), arrSt[i].substring(0, 1).toUpperCase());
			}
			newTableName="";
			for (int i = 0; i < arrSt.length; i++) {
				newTableName=newTableName+arrSt[i];
			}
			
		}
		return newTableName;
	
	}
	public static String OnexiaoXie(String str) {
		return str.replaceFirst(str.substring(0, 1), str.substring(0, 1).toLowerCase());
	}
	public static String xiaoXie(String str) {
		return str.toLowerCase();
	}
	
	public static  String setPropertyName(String coulumn) {  
        //String ch = "" + coulumn.charAt(0);  
        //coulumn = coulumn.replaceFirst(ch, ch.toLowerCase());  
        String ch ;  
        coulumn=coulumn.toLowerCase();  
        for (int index = 0; (index = coulumn.indexOf("_", index)) != -1 && index < coulumn.length() - 1;) {  
            index++;  
            ch = "" + coulumn.charAt(index);  
            coulumn = coulumn.replace("_" + ch, ch.toUpperCase());  
        }  
        coulumn = coulumn.replace("_", "");  
        ch = null;  
        return coulumn;  
    }  


}

 

你可能感兴趣的:(oracle)