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; } }