GenerateDao.java 5.74 KB
package com.taover.codegenerate.db;

import java.io.File;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import com.taover.codegenerate.model.dao.DaoModel;
import com.taover.codegenerate.model.dao.FunctionModel;
import com.taover.codegenerate.tools.StringUtil;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class GenerateDao {

	public static void table2dao(String filePath,String packagePath, Vector<TableColumn> tableColumns, String dbType) throws Exception {

		String sTableName      = tableColumns.get(0).getTableName();
		String sTableSchema    = tableColumns.get(0).getTableSchema();
		String sJavaBeanName   = tableColumns.get(0).getTableBeanUName();
		String packageBeanPath = packagePath + sJavaBeanName.toLowerCase() + ";";
		String sFileName       = filePath + sJavaBeanName.toLowerCase() + "";


		// 生成dao的模板
		DaoModel cif = new DaoModel();
		cif.setPackages(packageBeanPath.toLowerCase());
		cif.setUsers("com.taover");
		cif.setVersion("1.0");
		cif.setBeanName(sJavaBeanName);
		cif.setTableName(sTableName);
		cif.setDbType(dbType);
		
		//设置主键信息
		TableColumn pkcolum = TableColumn.getPKColum(tableColumns);
		cif.setPkBeanName(pkcolum.getColumBeanUName());
		cif.setPkColumName(pkcolum.getColumnName());
		cif.setPkType(pkcolum.getJAVADataType()); 
		
		//insert select 时的字段列表串
		cif.setColumn_list_str(Tools.getColumnListStr(tableColumns, sTableName));
		
		//设置数据库字段
		cif.setColumnList(Tools.getColums(tableColumns));
		//生成requset to po函数需要的字符串Map
		cif.setReqParameterToPOMap(getReqParameterToPOMap(tableColumns));
		
		// 生成引入
		generateImports(cif, packageBeanPath, sJavaBeanName);

		// 生成属性以及get,set方法
		//generateGetSetMethod(cif, sTableSchema);
		
		File f = new File(Tools.getPath() + Constants.TEMPATE_PATH);
		Configuration cfg = new Configuration();
		cfg.setDirectoryForTemplateLoading(f);
		
		StringWriter out = new StringWriter();
		Template template = cfg.getTemplate(Constants.TEMPATE_DAONAME, "UTF-8");		
		template.process(cif, out);
		
		Tools.createFile(sFileName, sJavaBeanName + "Dao.java", out.toString());

	}
	
	public static void generateGetSetMethod(DaoModel cif, String sTableSchema) {
		List<String> paramlist = new ArrayList<String>();
		
		
		
		paramlist.add("@Resource");
		paramlist.add("private JdbcTemplate jdbcegroceryRead;");
		paramlist.add("@Resource");
		paramlist.add("private JdbcTemplate jdbcegroceryWrite;");
		paramlist.add("private Logger logger = Logger.getLogger(this.getClass());");
		List<FunctionModel> functionList = generateGetSetFunction(paramlist);
		cif.setFunlist(functionList);

		cif.setPropertys(paramlist);
	}
	
	public static void generateImports(DaoModel cif, String packagebeanpath, String javaBeanName) {
		List<String> importlist = new ArrayList<String>();
		importlist.add("import java.util.*;");
		importlist.add("import org.apache.log4j.Logger;");
		importlist.add("import org.springframework.jdbc.core.JdbcTemplate;");
		importlist.add("import org.springframework.stereotype.Repository;");
		importlist.add("import org.apache.commons.logging.LogFactory;");
		importlist.add("import org.apache.commons.logging.Log;");
		importlist.add("import javax.annotation.Resource;");
		
		importlist.add("import com.taover.tools.JdbcUtil;");
		importlist.add("import com.taover.tools.StringUtil;");
		importlist.add("import com.taover.tools.StringUtils;");
		importlist.add("import com.taover.tools.DAORowMapper;");
		importlist.add("import com.taover.tools.LogUtils;");
		cif.setImports(importlist);
	}

	public static List<FunctionModel> generateGetSetFunction(List<String> params) {
		List<FunctionModel> functionList = new ArrayList<FunctionModel>();
		for (int i = 0; i < params.size(); i++) {
			FunctionModel getModel = new FunctionModel();
			FunctionModel setModel = new FunctionModel();
			String[] param = params.get(i).split(" ");
			getModel.setFunction_return(param[1]);
			if (param[2].equalsIgnoreCase("isLogInfo")) {
				getModel.setFunction_name("isLogInfo");
				setModel.setFunction_name(Constants.KEY_WORD[2] + "LogInfo");
			} else {
				getModel.setFunction_name(Constants.KEY_WORD[1] + StringUtil.getFunctionName(param[2]));
				setModel.setFunction_name(Constants.KEY_WORD[2] + StringUtil.getFunctionName(param[2]));
			}
			getModel.setFunction_body(Constants.KEY_WORD[0] + " " + param[2] + ";");
			setModel.setFunction_params(param[1] + " " + param[2]);
			setModel.setFunction_return(Constants.KEY_WORD[3]);
			setModel.setFunction_body(Constants.KEY_WORD[4] + param[2] + " = " + param[2] + ";");
			functionList.add(getModel);
			functionList.add(setModel);
		}
		return functionList;
	}
	
	public static Map<String, String>  getReqParameterToPOMap(Vector<TableColumn> tableColumns) {
		Map<String, String> reqParameterToPOMap = new LinkedHashMap<String, String>();
		if (tableColumns == null || tableColumns.size() == 0)
			return reqParameterToPOMap;
		for (int i = 0; i < tableColumns.size(); i++) {
			String sInputName = tableColumns.get(i).getColumBeanLName();
			String sColumBeanName = tableColumns.get(i).getColumBeanUName();
			String poLine =null;
            if(tableColumns.get(i).getDecimalDigits()!=0){
                 poLine = sColumBeanName + "((" + tableColumns.get(i).getJAVADataType()+ ") StringUtil.StringToObj((String) map.get(\""+ sInputName + "\"), " + 9999 + "))";
            }else{
                 poLine = sColumBeanName + "((" + tableColumns.get(i).getJAVADataType()+ ") StringUtil.StringToObj((String) map.get(\""+ sInputName + "\"), " + tableColumns.get(i).getDataType() + "))";
            }
			reqParameterToPOMap.put(sColumBeanName, poLine);
		}
		return reqParameterToPOMap;
	}
}