java通过实体类自动生成ibatis文件
2014-04-15 20:08
447 查看
package generate; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Field; import org.apache.log4j.Logger; /** * * @ProjectName:GenerateFile * @Author:tangwzh * @Description: TODO * @Version:V1.0 * @Date:2014-5-20 下午2:54:24 */ public class GenerateSql { private static final Logger LOGGER = Logger.getLogger(Thread .currentThread().getStackTrace()[1].getClassName()); /*public static void main(String[] args) { String filePath = "C:\\Users\\inrtyx\\Desktop"; generateSqlFile(filePath, "RESOURCE", "generate.Resource"); }*/ /** * * @param sqlFilePath 生成的sql路径 * @param tableName 表名 * @param modelQualityName 实体类全名 */ public static void generateSqlFile(String sqlFilePath, String tableName, String modelQualityName){ String lowerCaseName = tableName.toLowerCase(); String fileName = sqlFilePath + "/" + lowerCaseName + ".sql"; File file = new File(fileName); if(!file.exists()){ try { boolean isSuccess = file.createNewFile(); if(!isSuccess){ LOGGER.error("创建sql文件失败"); return; } } catch (IOException e) { e.printStackTrace(); LOGGER.error("create sql file error:", e); } } FileWriter fileWriter = null; try { fileWriter = new FileWriter(file); //文件开始 generateHeaderSql(modelQualityName, lowerCaseName, fileWriter); //select语句 generateSelectSql("select", modelQualityName, lowerCaseName, fileWriter); //select count语句 generateSelectSql("selectCount", modelQualityName, lowerCaseName, fileWriter); //update语句 generateUpdateSql(modelQualityName, lowerCaseName, fileWriter); //insert语句 generateInsertSql(modelQualityName, lowerCaseName, fileWriter); //delete语句 generateDeleteSql(lowerCaseName, fileWriter); //文件结束 generateEndSql(fileWriter); } catch (Exception e) { e.printStackTrace(); LOGGER.error(e); }finally{ try { if(fileWriter != null){ fileWriter.close(); } } catch (Exception e2) { e2.printStackTrace(); } } } private static void generateDeleteSql(String lowerCaseName, FileWriter fileWriter) throws IOException { String upperCaseName = lowerCaseName.toUpperCase(); String fistLetter = lowerCaseName.substring(0,1).toUpperCase(); String deleteId = "delete" + fistLetter + lowerCaseName.substring(1); //delete头 printTab(fileWriter, 1); fileWriter.write("<insert id=\"" + deleteId + "\" parameterClass=\"java.util.Map\">"); //delete语句 printTab(fileWriter, 2); fileWriter.write("DELETE FROM " + upperCaseName); //生成where语句 generateWhereSql(lowerCaseName, fileWriter); //结束 printTab(fileWriter, 1); fileWriter.write("</delete>"); } private static void generateInsertSql(String modelQualityName, String lowerCaseName, FileWriter fileWriter) throws ClassNotFoundException, IOException { String upperCaseName = lowerCaseName.toUpperCase(); String fistLetter = lowerCaseName.substring(0,1).toUpperCase(); String insertId = "insert" + fistLetter + lowerCaseName.substring(1); //insert头 printTab(fileWriter, 1); fileWriter.write("<insert id=\"" + insertId + "\" parameterClass=\""+ lowerCaseName +"\">"); //insert语句 printTab(fileWriter, 2); fileWriter.write("<![CDATA["); Class<?> c = Class.forName(modelQualityName); Field[] fields = c.getDeclaredFields(); StringBuilder sb = new StringBuilder("INSERT INTO "); sb.append(upperCaseName).append("("); String fieldName = ""; for(Field field: fields){ sb.append("\n").append("\t").append("\t").append("\t").append("\t"); fieldName = field.getName(); sb.append(fieldName).append(","); } sb.deleteCharAt(sb.length() - 1); sb.append("\n").append("\t").append("\t").append("\t"); sb.append(")").append("VALUES("); for(Field field: fields){ sb.append("\n").append("\t").append("\t").append("\t").append("\t"); fieldName = field.getName(); if("createTime".equals(fieldName) || "updateTime".equals(fieldName)){ sb.append("NOW()").append(","); continue; } sb.append("#").append(fieldName).append("#").append(","); } sb.deleteCharAt(sb.length() - 1); sb.append("\n").append("\t").append("\t").append("\t"); sb.append(")"); printTab(fileWriter, 3); fileWriter.write(sb.toString()); printTab(fileWriter, 2); fileWriter.write("]]>"); //结束 printTab(fileWriter, 1); fileWriter.write("</insert>"); } private static void generateUpdateSql(String modelQualityName, String lowerCaseName, FileWriter fileWriter) throws IOException, ClassNotFoundException { String upperCaseName = lowerCaseName.toUpperCase(); String fistLetter = lowerCaseName.substring(0,1).toUpperCase(); String updateId = "update" + fistLetter + lowerCaseName.substring(1); //update头 printTab(fileWriter, 1); fileWriter.write("<update id=\"" + updateId + "\" parameterClass=\"java.util.Map\">"); //update语句 printTab(fileWriter, 2); fileWriter.write("UPDATE " + upperCaseName); //set语句 generateWhereOrSetSql("set", lowerCaseName, modelQualityName, fileWriter); //生成where语句 generateWhereSql(lowerCaseName, fileWriter); //结束 printTab(fileWriter, 1); fileWriter.write("</update>"); } private static void generateWhereSql(String lowerCaseName, FileWriter fileWriter) throws IOException { printTab(fileWriter, 2); fileWriter.write("<dynamic prepend=\"WHERE\">"); String id = lowerCaseName + "Id"; printTab(fileWriter, 3); fileWriter.write("<isNotEmpty prepend=\"AND\" property=\"" + id + "\">"); printTab(fileWriter, 4); fileWriter.write(id.toUpperCase() + "= #" + id + "#"); printTab(fileWriter, 3); fileWriter.write("</isNotEmpty>"); printTab(fileWriter, 2); fileWriter.write("</dynamic>"); } private static void generateEndSql(FileWriter fileWriter) throws IOException { printTab(fileWriter, 0); fileWriter.write("</sqlMap>"); } private static void generateSelectSql(String type, String modelQualityName, String lowerCaseName, FileWriter fileWriter) throws IOException, ClassNotFoundException { String upperCaseName = lowerCaseName.toUpperCase(); String fistLetter = lowerCaseName.substring(0,1).toUpperCase(); //例如,selecterResources String selectedId = "select" + fistLetter + lowerCaseName.substring(1) + "s"; printTab(fileWriter, 1); //select语句 if("select".equals(type)){//select语句 fileWriter.write("<select id=\"" + selectedId + "\" parameterClass=\"java.util.Map\" resultClass=\""+ lowerCaseName +"\">"); printTab(fileWriter, 2); fileWriter.write("<![CDATA[ SELECT * FROM " + upperCaseName + "]]>"); }else{ fileWriter.write("<select id=\"" + selectedId + "Count" + "\" parameterClass=\"java.util.Map\" resultClass=\"int\">"); printTab(fileWriter, 2); fileWriter.write("<![CDATA[ SELECT COUNT(*) FROM " + upperCaseName + "]]>"); } //where语句 generateWhereOrSetSql("where", lowerCaseName, modelQualityName, fileWriter); //结束标签 printTab(fileWriter, 1); fileWriter.write("</select>"); } private static void generateWhereOrSetSql(String type, String lowerCaseName, String modelQualityName, FileWriter fileWriter) throws IOException, ClassNotFoundException { printTab(fileWriter, 2); if("where".equals(type)){ fileWriter.write("<dynamic prepend=\"WHERE\">"); }else{ fileWriter.write("<dynamic prepend=\"SET\">"); } Class<?> c = Class.forName(modelQualityName); Field[] fields = c.getDeclaredFields(); String fieldName = null; for(Field field: fields){ fieldName = field.getName(); if("where".equals(type)){ printTab(fileWriter, 3); fileWriter.write("<isNotEmpty prepend=\"AND\" property=\"" + fieldName + "\">"); }else{ String id = lowerCaseName + "Id"; if(id.equals(fieldName)){ continue; } printTab(fileWriter, 3); fileWriter.write("<isNotEmpty prepend=\",\" property=\"" + fieldName + "\">"); } printTab(fileWriter, 4); fileWriter.write(fieldName.toUpperCase() + "=#" + fieldName + "#"); printTab(fileWriter, 3); fileWriter.write("</isNotEmpty>"); } printTab(fileWriter, 2); fileWriter.write("</dynamic>"); } private static void printTab(FileWriter fileWriter, int count) throws IOException { fileWriter.write("\n"); for(int i = 0 ; i < count; i++){ fileWriter.write("\t"); } } private static void generateHeaderSql(String modelQualityName, String lowerCaseName, FileWriter fileWriter) throws IOException { fileWriter.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"); fileWriter.write("\n"); fileWriter.write("<!DOCTYPE sqlMap PUBLIC \"-//ibatis.apache.org//DTD SQL Map 2.0//EN\" \"http://ibatis.apache.org/dtd/sql-map-2.dtd\">"); fileWriter.write("\n"); fileWriter.write("<sqlMap namespace=\"" + lowerCaseName + "\">"); fileWriter.write("\n"); fileWriter.write(" "); fileWriter.write(" <typeAlias alias=\"" + lowerCaseName + "\" type=\""+ modelQualityName +"\" />"); } }
相关文章推荐
- Java—内部类
- jdk环境变量配置
- Java中的异常
- 深入分析Java ClassLoader原理
- Java利用OpenOffice将word等office文档转换成PDF
- 五家共井
- java继承
- Java中图片压缩处理
- java: session
- 尝试解答java内存问题
- 尝试解答java内存问题
- "Initializing Java Tooling" or "Repository registry initialization" Eclipse
- java 线程
- Spring 3.0参考手册之SpEL
- 初识springMVC
- Struts2提交表单中文乱码问题解决
- java继承
- java对象的行为
- 【甘道夫】win7环境下eclipse连接hadoop报错简单解决:重编译FileUtil.java
- Eclipse中要导出jar包中引用了第三方jar包怎么办【】