java通过实体类自动生成ibatis文件

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  +"\" />");
	}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值