package com.taover.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.base.template.model.dao.DaoModel; import com.taover.base.template.model.dao.FunctionModel; import com.taover.tools.StringUtil; import freemarker.template.Configuration; import freemarker.template.Template; public class GenerateDao { public static void table2dao(String filePath,String packagePath, Vector 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 paramlist = new ArrayList(); 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 functionList = generateGetSetFunction(paramlist); cif.setFunlist(functionList); cif.setPropertys(paramlist); } public static void generateImports(DaoModel cif, String packagebeanpath, String javaBeanName) { List importlist = new ArrayList(); 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 generateGetSetFunction(List params) { List functionList = new ArrayList(); 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 getReqParameterToPOMap(Vector tableColumns) { Map reqParameterToPOMap = new LinkedHashMap(); 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; } }