3
package com.lfx.tools.ibatis;import java.util.HashMap; import java.util.Map; import com.lfx.po.SalesWord;public class PoMap { /** * @param args */ public static Map<String,Object> putObject() { Map<String,Object> hashmap=new HashMap<String,Object>(); SalesWord SalesWord = new SalesWord(); hashmap.put("SalesWord",SalesWord); return hashmap; } } 4. po类略,只写一个 package com.lfx.po;import java.io.Serializable; import java.util.Date;import com.lfx.tools.ibatis.PK; import com.lfx.tools.ibatis.TODO; @TODO("salesword") public class SalesWord implements Serializable{ /** * */ private static final long serialVersionUID = 1L; @PK @TODO("id") private Long id; @TODO("title") private String title; @TODO("content") private String content; @TODO("publishdate") private Date publishDate; @TODO("userid") private Long userId; @TODO("username") private String userName; @TODO("type") private Long type; @TODO("ischecked") private Long isChecked; / public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getPublishDate() { return publishDate; } public void setPublishDate(Date publishDate) { this.publishDate = publishDate; } public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public Long getIsChecked() { return isChecked; } public void setIsChecked(Long isChecked) { this.isChecked = isChecked; } public Long getType() { return type; } public void setType(Long type) { this.type = type; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; }}5. package com.lfx.tools.ibatis;import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter;public class PoToWriteXml { /** * @param args */ private static String ORACLEDATABASE="oracle";//oracle鏁版嵁搴撶増锟� private static String MYSQLDATABASE="mysql";//mysql鏁版嵁搴撶増锟� private static String databaseType; @SuppressWarnings("unchecked") public static <T> void sqlMap(T t,String folderPath) { databaseType=MYSQLDATABASE; String pk=""; String pkValue=""; Class class1 = t.getClass(); System.out.println(class1.getName());//娴嬭瘯鎵撳嵃绫诲悕 //寰楀埌琛ㄦ槑 TODO tableTodo=(TODO) class1.getAnnotation(TODO.class); String table=tableTodo.value(); Field[] declaredFields = class1.getDeclaredFields(); String type=class1.getName(); String simpleName = class1.getSimpleName(); char charAt = (char)(simpleName.charAt(0)+32); String alias=charAt+simpleName.substring(1); Document doc = org.dom4j.DocumentHelper.createDocument(); Document addDocType = doc.addDocType("sqlMap", "-//ibatis.apache.org//DTD SQL Map 2.0//EN", "http://ibatis.apache.org/dtd/sql-map-2.dtd"); System.out.println(addDocType+"lllllllllll"); Element rootElement = doc.addElement("sqlMap");//鍒涘缓鏍硅妭锟� rootElement.addAttribute("namespace",type); //鏍硅妭鐐规坊鍔犲睘锟� typeAliasElement(rootElement,alias,type); resultMapElement(rootElement,alias,pk,table,declaredFields); insertElement(rootElement,alias,pk,pkValue,table,declaredFields,databaseType);//娣诲姞鎻掑叆鑺傜偣 deleteByIdElement(rootElement,alias,pk,table,pkValue,declaredFields);///娣诲姞鍒犻櫎鑺傜偣閫氳繃涓婚敭 updateElement(rootElement,alias,pk,table,pkValue,declaredFields);//娣诲姞鍔拷?鏇存柊鑺傜偣 findByIdElement(rootElement,alias,pk,table,pkValue,declaredFields);///娣诲姞鎸変富閿煡鎵捐妭锟� findNameByIdElement(rootElement,alias,pk,table,pkValue,declaredFields); findAllElement(rootElement,alias,table,declaredFields,databaseType);///娣诲姞鏌ユ壘鍏ㄩ儴瀵硅薄鑺傜偣锛堜笉鍒嗛〉锟� selectPageElement(rootElement,alias,table,declaredFields,databaseType);///娣诲姞鍔拷?鍒嗛〉鏌ヨ鑺傜偣 countRecordElement(rootElement,alias,table,declaredFields);///娣诲姞鍔拷?鍒嗛〉缁熻鑺傜偣 writeXml(folderPath+simpleName+".xml",doc);//鐢熸垚xml鏂囦欢 } public static Element typeAliasElement(Element rootElement,String alias,String type){ //typeAlias鑺傜偣 Element typeAlias = rootElement.addElement("typeAlias"); typeAlias.addAttribute("alias",alias); typeAlias.addAttribute("type",type); return typeAlias; } public static Element resultMapElement(Element rootElement,String alias,String pk,String table,Field[] declaredFields){ //resultMap鑺傜偣 Element resultMap = rootElement.addElement("resultMap"); resultMap.addAttribute("id",alias+"Result"); resultMap.addAttribute("class",alias); for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value().toUpperCase(); String javaType = field.getType().getCanonicalName(); // String jdbcType=""; // if(javaType.equals("java.lang.Long")){ // jdbcType="NUMERIC"; // } // if(javaType.equals("java.util.Date")){ // jdbcType="DATE"; // } // else if(javaType.equals("java.lang.String")){ // jdbcType="VARCHAR"; // } //濡傛灉杩樻湁鍏朵粬鏁版嵁绫诲瀷锛岀户缁坊锟� //鍚憆esultMap涓嬪姞result Element result = resultMap.addElement("result"); result.addAttribute("property", fieldName); result.addAttribute("column", column); // result.addAttribute("javaType", javaType); // result.addAttribute("jdbcType", jdbcType); } } return resultMap; } public static Element insertElement(Element rootElement,String alias,String pk,String pkValue,String table,Field[] declaredFields,String datatabasType){ Element insert = rootElement.addElement("insert"); insert.addAttribute("id", "insert"); insert.addAttribute("parameterClass", alias); // Element selectKey = insert.addElement("selectKey");//oracle闇�selectKey鑺傜偣, mysql涓嶉渶瑕乻electKey鑺傜偣 // selectKey.addAttribute("resultClass", "java.lang.Long"); // if(datatabasType.toLowerCase().equals("oracle")){// 鍒ゆ柇鏁版嵁搴撶殑绫诲瀷 // selectKey.addText("SELECT SEQ_"+table.toUpperCase()+"_ID.NEXTVAL FROM DUAL"); // }else if(datatabasType.toLowerCase().equals("mysql")){ // selectKey.addText("SELECT LAST_INSERT_ID() as "+pkValue); // } StringBuffer insertText=new StringBuffer(); insertText.append("insert into "+table.toUpperCase()+"( "); StringBuffer insertText2=new StringBuffer(); StringBuffer insertText3=new StringBuffer(); for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ //寰楀埌鍒楁槑 TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value(); if(!field.isAnnotationPresent(PK.class)){ insertText2.append(column.toUpperCase()+","); insertText3.append("#"+fieldName+"#,"); }else{ insertText2.append(column.toUpperCase()+","); insertText3.append("#"+fieldName+"#,"); pk=column; pkValue=fieldName; } } } insertText2.deleteCharAt(insertText2.lastIndexOf(",")); insertText3.deleteCharAt(insertText3.lastIndexOf(",")); // selectKey.addAttribute("keyProperty", pkValue); insertText.append(insertText2); insertText.append(" ) values ( "); insertText.append(insertText3); insertText.append(" )"); // selectKey.addText("select LAST_INSERT_ID() as "+pkValue);//msyql绫诲瀷 // selectKey.addText("SELECT SEQ_CNNIC_DOMAIN_BASIC_REG_ID.NEXTVAL FROM DUAL "); //oracle绫诲瀷.璇存槑锛歋EQ_CNNIC_DOMAIN_BASIC_REG_ID鏄痮racle鐨勫簭鍒楋紝涓嶅悓鐨勮〃鏈変笉鍚岀殑搴忓垪 insert.addText(insertText.toString()); return insert; } public static Element updateElement(Element rootElement,String alias,String pk,String table,String pkValue,Field[] declaredFields){ //update鑺傜偣 Element update = rootElement.addElement("update"); update.addAttribute("id", "update"); update.addAttribute("parameterClass", alias); update.addText("update "+table.toUpperCase()+" "); //dynamic 鑺傜偣 Element dynamicUpdate = update.addElement("dynamic"); dynamicUpdate.addAttribute("prepend", "set"); //----------------------// for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value(); if(!field.isAnnotationPresent(PK.class)){ Element isNotNull = dynamicUpdate.addElement("isNotNull"); isNotNull.addAttribute("prepend", ","); isNotNull.addAttribute("property", fieldName); isNotNull.addText(column.toUpperCase()+" = #"+fieldName+"#"); }else{ pk=column; pkValue=fieldName; } } } //----------------------// update.addText("where "+pk+" = #"+pkValue+"#"); return update; } public static String selectStr(Field[] declaredFields){ String str=""; for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value().toUpperCase(); str+=column+","; } } str=str.substring(0,str.lastIndexOf(",")) ; return str; } public static Element findByIdElement(Element rootElement,String alias,String pk,String table,String pkValue,Field[] declaredFields){ //涓婚敭鏌ヨ鑺傜偣 Element queryAllById = rootElement.addElement("select"); queryAllById.addAttribute("id", "findById"); queryAllById.addAttribute("parameterClass", "java.lang.Long"); queryAllById.addAttribute("resultMap", alias+"Result"); for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value(); if(!field.isAnnotationPresent(PK.class)){ }else{ pk=column; pkValue=fieldName; } } } queryAllById.addText("select * from "+table.toUpperCase()+" where "+pk+" = #"+pkValue+"#"); return queryAllById; } public static Element findNameByIdElement(Element rootElement,String alias,String pk,String table,String pkValue,Field[] declaredFields){ //涓婚敭鏌ヨ鑺傜偣锛屾煡璇㈢粨鏋滆繑鍥炵殑鍊煎彧鏈塏ame瀛楁锛屽叾浠栧瓧娈靛�閮戒负绌� Element queryAllById = rootElement.addElement("select"); queryAllById.addAttribute("id", "findNameById"); queryAllById.addAttribute("parameterClass", "java.lang.Long"); queryAllById.addAttribute("resultMap", alias+"Result"); for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value(); if(!field.isAnnotationPresent(PK.class)){ }else{ pk=column; pkValue=fieldName; } } } queryAllById.addText("select * from "+table.toUpperCase()+" where "+pk+" = #"+pkValue+"#"); return queryAllById; } public static Element findAllElement(Element rootElement,String alias,String table,Field[] declaredFields,String datatabasType){ Element queryAll = rootElement.addElement("select"); queryAll.addAttribute("id","selectAll"); queryAll.addAttribute("parameterClass","java.util.Map"); queryAll.addAttribute("resultMap",alias+"Result"); String selectStr=selectStr(declaredFields); String selectPageHead2="select "+selectStr+" from "+table.toUpperCase(); queryAll.addText(selectPageHead2); Element selectPageDynamic = queryAll.addElement("dynamic"); selectPageDynamic.addAttribute("prepend", "where"); for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value(); if(!field.isAnnotationPresent(PK.class)){ Element isNotNulldanamic=selectPageDynamic.addElement("isNotNull"); isNotNulldanamic.addAttribute("prepend", " and "); isNotNulldanamic.addAttribute("property", fieldName); isNotNulldanamic.addText(column.toUpperCase()+" = #"+fieldName+"#"); } } } queryAll.addText("order by id desc"); return queryAll; } public static Element deleteByIdElement(Element rootElement,String alias,String pk,String table,String pkValue,Field[] declaredFields){ //delete鑺傜偣 Element delete = rootElement.addElement("delete"); delete.addAttribute("id", "delete"); delete.addAttribute("parameterClass", alias); for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value(); if(!field.isAnnotationPresent(PK.class)){ }else{ pk=column; pkValue=fieldName; } } } delete.addText("delete from "+table.toUpperCase()+" where "+pk+" = #"+pkValue+"#"); return delete; } public static Element selectPageElement(Element rootElement,String alias,String table,Field[] declaredFields,String datatabasType){ //鍒嗛〉鑺傜偣鍔拷?鏌ヨ Element selectPage = rootElement.addElement("select"); selectPage.addAttribute("id","selectPage"); selectPage.addAttribute("parameterClass","java.util.Map"); selectPage.addAttribute("resultMap",alias+"Result"); String selectPageHead1="select * from ( select row_.*, rownum rownum_ from ("; String selectStr=selectStr(declaredFields); String selectPageHead2="select "+selectStr+" from "+table.toUpperCase(); String selectPagetail=") row_ where rownum <=#endIndex#) where rownum_ >= #startIndex#"; if(datatabasType.toLowerCase().equals("oracle")){// 鍒ゆ柇鏁版嵁搴撶殑绫诲瀷 selectPage.addText(selectPageHead1+selectPageHead2); }else if(datatabasType.toLowerCase().equals("mysql")){ selectPage.addText(selectPageHead2); } //鍒嗛〉鑺傜偣鍔拷?鏌ヨdynamic瀛愯妭锟� Element selectPageDynamic = selectPage.addElement("dynamic"); selectPageDynamic.addAttribute("prepend", "where"); //------------------ for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value(); if(!field.isAnnotationPresent(PK.class)){ Element isNotNulldanamic=selectPageDynamic.addElement("isNotNull"); isNotNulldanamic.addAttribute("prepend", " and "); isNotNulldanamic.addAttribute("property", fieldName); isNotNulldanamic.addText(column.toUpperCase()+" = #"+fieldName+"#"); } } } if(datatabasType.toLowerCase().equals("oracle")){// 鍒ゆ柇鏁版嵁搴撶殑绫诲瀷 selectPage.addText(selectPagetail); }else if(datatabasType.toLowerCase().equals("mysql")){ selectPage.addText(" order by id desc limit #startIndex#,#endIndex#"); } return selectPage; } //count鑺傜偣缁熻鏁版嵁 public static Element countRecordElement(Element rootElement,String alias,String table,Field[] declaredFields){ Element count = rootElement.addElement("select"); count.addAttribute("id", "selectCount"); count.addAttribute("parameterClass", "java.util.Map"); count.addAttribute("resultClass", "java.lang.Long"); String strcount = countStr(declaredFields); count.addText("select count("+strcount+") from "+table.toUpperCase()+" "); //dynamic 鑺傜偣 Element dynamicCount = count.addElement("dynamic"); dynamicCount.addAttribute("prepend", "where"); for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value(); if(!field.isAnnotationPresent(PK.class)){ Element isNotNull = dynamicCount.addElement("isNotNull"); isNotNull.addAttribute("prepend", " and "); isNotNull.addAttribute("property", fieldName); isNotNull.addText(column.toUpperCase()+" = #"+fieldName+"#"); } } } count.addText(" order by id desc "); return count; } public static String countStr(Field[] declaredFields){ String str=""; for (Field field : declaredFields) { String fieldName = field.getName(); if((!fieldName.equals("serialVersionUID"))&&(!field.getType().getSimpleName().equals("List"))&&(!(field.getModifiers()==25))){ TODO columnTodo = field.getAnnotation(TODO.class); String column=columnTodo.value(); if(field.isAnnotationPresent(PK.class)){ str=column; } } } if(str.equals("") || str==null){ str="*"; } return str; } public static void writeXml(String str,Document doc){ try { OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); FileOutputStream fos = new FileOutputStream(new File(str)); OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8"); XMLWriter writer = new XMLWriter(osw, format); writer.write(doc); writer.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { String rootstr="E://eclipse//workspace_icp//CtSystem//dao//com//lfx//po"; String rootdes="E://eclipse//workspace_icp//CtSystem//resourcexml//sqlmapxml//"; Map<String ,String> pathMap=new HashMap<String ,String>(); pathMap.put(rootstr,rootdes); for(String obj : pathMap.keySet()) { String key = obj; String value = pathMap.get(obj); listfile2(key,value); } long a = System.currentTimeMillis(); System.out.println(System.currentTimeMillis() - a); } public static void listfile2(String strPath,String folderPath) { File dir = new File(strPath); File[] files = dir.listFiles(); if (files == null) return ; for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { //listfile2(files[i].getAbsolutePath()); } else { String strFileName = files[i].getAbsolutePath(); if(strFileName.indexOf(".svn")<0){ //System.out.println("-" + strFileName); //System.out.println(strFileName.lastIndexOf("\\")); String fileNameWithExtension=strFileName.substring(strFileName.lastIndexOf("\\")+1); //System.out.println(fileNameWithExtension); if(fileNameWithExtension.lastIndexOf(".java")>0){ String fileNameNoExtension=fileNameWithExtension.substring(0,fileNameWithExtension.lastIndexOf(".java")); // System.out.println(fileNameNoExtension); // Object o= (Object)fileNameNoExtension; // PoToSqlMap map=new PoToSqlMap(); // String folderPath="E://workspace_icp//TestOpts//src//main//resources//ibatis//icp//audit//"; Map<String,Object> hashmap=PoMap.putObject(); Object o=hashmap.get(fileNameNoExtension); if(o!=null){ sqlMap(hashmap.get(fileNameNoExtension),folderPath); }else{ System.out.println(fileNameNoExtension+"is NULL"); } } } } } } }
JAVA 自动生成iBATIS xml文件l
最新推荐文章于 2021-02-24 21:24:22 发布