package com.github.walker.easydb.entitygen; import com.github.walker.easydb.assistant.MappingUtil; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.*; /** * 代码构建 * * @author HuQingmiao */ public class CodeBuilder { protected String tableName; protected Map<String, MetaDataDescr> colNameMetaMap; /** * 表名 * * @param tableName */ public CodeBuilder(String tableName) { System.out.println("\n>>>>>>>为表"+tableName+" 生成实体:"); this.tableName = tableName.trim().toLowerCase(); this.colNameMetaMap = new MetaMapping(tableName).getColNameMetaMap(); } /** * 构造实体类的源码 * * @return */ protected String buildCodeStr() throws Exception { StringBuffer buff = new StringBuffer("\n\n"); buff.append("import com.github.walker.easydb.dao.BaseEntity; \n"); buff.append("import com.github.walker.easydb.datatype.EInteger; \n"); buff.append("import com.github.walker.easydb.datatype.ELong; \n"); buff.append("import com.github.walker.easydb.datatype.EDouble; \n"); buff.append("import com.github.walker.easydb.datatype.EFloat; \n"); buff.append("import com.github.walker.easydb.datatype.EString; \n"); buff.append("\n"); // public class AA { buff.append("@SuppressWarnings(\"serial\")\n"); buff.append("public class "); buff.append(MappingUtil.getEntityName(tableName)); buff.append(" extends BaseEntity{\n"); //生成属性 private String xxx; for (Iterator<String> it = colNameMetaMap.keySet().iterator(); it.hasNext(); ) { String colName = it.next(); MetaDataDescr md = colNameMetaMap.get(colName); String filedName = md.getFieldName(); Class fieldType = md.getFieldType(); String fieldTypeName = fieldType.getSimpleName(); // System.out.println(">>" + fieldType.getName()); //if (fieldType.getName().contains("java.lang") || fieldType.getName().startsWith("[")) { buff.append(" private " + fieldTypeName + " " + filedName + ";\n"); } buff.append("\n"); // default constructor method buff.append(" public String[] pk() {\n "); buff.append(" return new String[]{};\n"); buff.append(" }\n\n\n"); //生成方法 public String getXXX(); for (Iterator<String> it = colNameMetaMap.keySet().iterator(); it.hasNext(); ) { String colName = it.next(); MetaDataDescr md = colNameMetaMap.get(colName); String fieldName = md.getFieldName(); Class fieldType = md.getFieldType(); String fieldTypeName = fieldType.getSimpleName(); if (fieldType.getName().contains("java.lang") || fieldType.getName().startsWith("[")) { fieldTypeName = fieldType.getSimpleName(); } String firstChar = fieldName.substring(0, 1).toUpperCase(); if (fieldName.length() > 1 && Character.isUpperCase(fieldName.charAt(1))) { firstChar = firstChar.toLowerCase(); } buff.append(" public " + fieldTypeName + " get"); buff.append(firstChar + fieldName.substring(1) + "() {\n"); buff.append(" return " + fieldName + ";\n"); buff.append(" }\n\n"); buff.append(" public void set"); buff.append(firstChar + fieldName.substring(1)); buff.append("(" + fieldTypeName + " " + fieldName + ") {\n"); buff.append(" this." + fieldName + " = " + fieldName + ";\n"); buff.append(" }\n\n"); } buff.append("}\n\n"); //生成各字段名拼接的字符串 buff.append("/*List columns as follows:\n"); int i = 0; for (Iterator<String> it = colNameMetaMap.keySet().iterator(); it.hasNext(); ) { String colName = it.next(); buff.append("\"" + colName.toLowerCase() + "\", "); i++; if (i % 7 == 0) { buff.append("\n"); } } buff.delete(buff.lastIndexOf(","), buff.length()); buff.append("\n*/"); return buff.toString(); } /** * 生成实体类文件 * * @param dirc 文件输出目录 */ public void createEntityTo(File dirc) throws IOException { OutputStreamWriter osw = null; try { String srcContent = this.buildCodeStr(); String filename = dirc.getCanonicalPath() + File.separator + MappingUtil.getEntityName(tableName) + ".java"; osw = new OutputStreamWriter(new FileOutputStream(filename)); osw.write(srcContent, 0, srcContent.length()); osw.flush(); } catch (Exception e) { e.printStackTrace(); } finally { if (osw != null) { osw.close(); } } } }