java开发代码生成工具——非通用,无聊的可以看看

近日事情不多,自己也一直有想开发一个代码生成工具的想法,既然我们是搬砖的,搬砖这个动作就是很重复性的动作了,就必然有一些东西能够封装起来,部门的互联网项目适用性不高,但是开发集团内部的企业应用的项目组来说功能还是很强大的。

说干就干,用了三天左右的时间开发完成,耦合度很低,将工具复制到项目test包下,简单的几项配置信息填写,就可生成由页面到数据的所有重复性代码的自动生成,同事开发企业应用时一天左右的工作量被压缩到10分钟以内。

虽然这个工具对别的公司的小伙伴来说没什么用,但是里面的文件路径、公共抽象类、项目前缀和数据库类型的自动检测机制还是有一些借鉴意义的。

话不多说,上代码(自动检测机制代码都在后半部分):

package test;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;
import org.junit.Test;
/**
 * 说明:
 * 1、一键生成(直接在eclipse中生成):jsp(包括list、edit、detail)、包结构、controller、api、
 * facade、Bo、Do、Query、Service、ServiceImpl、Dao、mapper.xml(支持mysql,oracle两种数据库,自动检测)、
 * 表创建sql、oracle序列创建sql(sql在控制台查看)
 * 2、只适用于基于SSM架构的符合platform平台标准包结构的项目
 * 
 * 操作步骤:
 * 1、复制此工具类到core项目test包下
 * 2、填完配置信息,junit运行work方法,然后eclipse选中项目右键菜单点击Refresh即可在项目中查看生成好的代码文件。
 * @author yangjq(如有问题和建议,感谢反馈)
 */
public class CreateMybatisCodeUtil {
	//---------配置信息开始--------
	/**功能模块包名,没有则创建完整包结构,如:教学模块:teach*/
	private static final String packageName="";//必填
	
	/**功能模块关键词(首字母大写遵循驼峰命名如:学员管理:StudentManage,
	 * 则创建的类名例:MoocStudentManageService)*/
	private static final String keyWord="";//必填
	
	/**jsp所在本地项目名,如:xxx-web*/
	private static final String webProjectName="";//必填
	
	/**Controller所在本地项目名,如:xxx-console*/
	private static final String consoleProjectName="";//必填
	
	/**字段名*/
	public enum Properties{
		/**初始化字段名,一直累加即可(首字母小写遵循驼峰命名)*/
		A("id","主键","norm"),
		B("createUserid","创建人id","common"),
		C("createDate","创建时间","common"),
		D("updateUserid","更新人id","common"),
		D1("updateDate","更新时间","common"),
		E("remark","备注","common"),
		F("heiheiHei","测试字段","norm");
		/**字段名*/
		private String name;
		/**备注注释:common属性字段的备注注释不可更改*/
		private String remark;
		/**特殊标识:在抽象公共类中的属性填common,其他业务字段填norm,
		 * 如果项目有公共抽象类则common属性字段名必须和抽象类中字段名完全一致*/
		private String special;
		private Properties(String name,String remark,String special){
			this.name=name;
			this.remark=remark;
			this.special=special;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getRemark() {
			return remark;
		}
		public void setRemark(String remark) {
			this.remark = remark;
		}
		public String getSpecial() {
			return special;
		}
		public void setSpecial(String special) {
			this.special = special;
		}
		
	}
	//--------配置信息结束---------
	/**
	 * junit运行此方法,开始生成,
	 * 不需要哪个文件就注销哪个生成的方法即可。
	 * @throws Exception 
	 */
	@Test
	public void work() throws Exception{
		createDo();	        //创建Do.java
		createBo();         //创建Bo.java
		createQuery();      //创建Query.java
		createXml();        //创建mapper.xml
		createDao();        //创建Dao.java
		createService();    //创建Service.java
		createServiceImpl();//创建ServiceImpl.java
		createApi();        //创建Api.java
		createFacade();     //创建Facade.java
		createController(); //创建Controller.java
		createListJsp();    //创建List.jsp
		createEditJsp();    //创建Edit.jsp
		createDetailJsp();  //创建Detail.jsp
		systemOutSql();     //控制台输出相关SQL
	}
	
	
	
	
	
	
	//-----------详细代码区-----------
	static{
		/**路径智能检测及初始化*/
		initBasePackagePath();
		initPath();
		initPrevName();
		initDbType();
		initConsoleBasePath();
		initJspBasePath();
		checkPackage();
	}
	/**
	 * 生成Do
	 * @throws Exception
	 */
	private void createDo() throws Exception{
		StringBuffer context=new StringBuffer();
		context.append("package "+packagePath+".domain;");
		context.append("\nimport java.util.ArrayList;");
		context.append("\nimport java.util.Collections;");
		context.append("\nimport java.util.List;");
		context.append("\nimport "+packagePath+".api.model."+prevClassName+"Bo;");
		context.append("\nimport net.sf.cglib.beans.BeanCopier;");
		String abstractPath=findAbstractModel("Do.java");
		if(StringUtils.isNotBlank(abstractPath)){
			context.append("\nimport "+abstractPath+";");
			String abstractName=abstractPath.substring(abstractPath.lastIndexOf(".")+1);
			context.append("\npublic class "+prevClassName+"Do extends "+abstractName+" {");
		}else{
			context.append("\nimport java.io.Serializable;");
			context.append("\npublic class "+prevClassName+"Do implements Serializable {");
		}
		context.append("\n\tprivate static BeanCopier doToBoCopier = BeanCopier.create("+prevClassName+"Do.class, "+prevClassName+"Bo.class, false);");
		context.append("\n\n\tprivate static BeanCopier boToDoCopier = BeanCopier.create("+prevClassName+"Bo.class, "+prevClassName+"Do.class, false);");
		StringBuffer getSetString=new StringBuffer();
		for(Properties property:Properties.values()){
			String name=property.getName();
			if(StringUtils.isNotBlank(abstractPath)&&"common".equals(property.getSpecial())){
				continue;
			}
			String type=Type4Name.getType(name);
			String upName=upFirst(name);
			context.append("\n\t/**"+property.getRemark()+"*/");
			context.append("\n\tprivate "+type+" "+name+";");
			String imbig="import java.math.BigDecimal;\n";
			if("BigDecimal".equals(type)&&context.indexOf(imbig)==-1){
				context.insert(context.indexOf("import "), imbig);
			}
			String imdate="import java.util.Date;\n";
			if("Date".equals(type)&&context.indexOf(imdate)==-1){
				context.insert(context.indexOf("import "), imdate);
			}
			getSetString.append("\n\n\tpublic "+type+" get"+upName+"() {");
			getSetString.append("\n\t\treturn "+name+";");
			getSetString.append("\n\t}");
			getSetString.append("\n\n\tpublic void set"+upName+"("+type+" "+name+") {");
			getSetString.append("\n\t\tthis."+name+" = "+name+";");
			getSetString.append("\n\t}");
		}
		context.append("\n\tpublic static "+prevClassName+"Do boToDo("+prevClassName+"Bo bo) {");
		context.append("\n\t\tif (bo == null) {");
		context.append("\n\t\t\treturn null;");
		context.append("\n\t\t}");
		context.append("\n\t\t"+prevClassName+"Do domain = new "+prevClassName+"Do();");
		context.append("\n\t\tboToDoCopier.copy(bo, domain, null);");
		context.append("\n\t\treturn domain;");
		context.append("\n\t}");
		context.append("\n\n\tpublic static List<"+prevClassName+"Do> boToDo(List<"+prevClassName+"Bo> boList) {");
		context.append("\n\t\tif (boList == null || boList.isEmpty()) {");
		context.append("\n\t\t\treturn Collections.emptyList();");
		context.append("\n\t\t}");
		context.append("\n\t\tList<"+prevClassName+"Do> doList = new ArrayList<>();");
		context.append("\n\t\tfor ("+prevClassName+"Bo bo : boList) {");
		context.append("\n\t\t\tdoList.add(boToDo(bo));");
		context.append("\n\t\t}");
		context.append("\n\t\treturn doList;");
		context.append("\n\t}");
		context.append("\n\n\tpublic static "+prevClassName+"Bo doToBo("+prevClassName+"Do domain) {");
		context.append("\n\t\tif (domain == null) {");
		context.append("\n\t\t\treturn null;");
		context.append("\n\t\t}");
		context.append("\n\t\t"+prevClassName+"Bo bo = new "+prevClassName+"Bo();");
		context.append("\n\t\tdoToBoCopier.copy(domain, bo, null);");
		context.append("\n\t\treturn bo;");
		context.append("\n\t}");
		context.append("\n\n\tpublic static List<"+prevClassName+"Bo> doToBo(List<"+prevClassName+"Do> doList) {");
		context.append("\n\t\tif (doList == null || doList.isEmpty()) {");
		context.append("\n\t\t\treturn Collections.emptyList();");
		context.append("\n\t\t}");
		context.append("\n\t\tList<"+prevClassName+"Bo> boList = new ArrayList<>();");
		context.append("\n\t\tfor ("+prevClassName+"Do Kdo : doList) {");
		context.append("\n\t\t\tboList.add(doToBo(Kdo));");
		context.append("\n\t\t}");
		context.append("\n\t\treturn boList;");
		context.append("\n\t}");
		context.append(getSetString);
		context.append("\n}");
		writeToFile(context.toString(), toPackageLocalPath+"domain/"+prevClassName+"Do.java");
	}
	/**
	 * 生成Bo
	 * @throws Exception
	 */
	private void createBo() throws Exception{
		StringBuffer context=new StringBuffer();
		context.append("package "+packagePath+".api.model;");
		String abstractPath=findAbstractModel("Bo.java");
		if(StringUtils.isNotBlank(abstractPath)){
			context.append("\nimport "+abstractPath+";");
			String abstractName=abstractPath.substring(abstractPath.lastIndexOf(".")+1);
			context.append("\npublic class "+prevClassName+"Bo extends "+abstractName+" {");
		}else{
			context.append("\nimport java.io.Serializable;");
			context.append("\npublic class "+prevClassName+"Bo implements Serializable {");
		}
		StringBuffer getSetString=new StringBuffer();
		for(Properties property:Properties.values()){
			String name=property.getName();
			if(StringUtils.isNotBlank(abstractPath)&&"common".equals(property.getSpecial())){
				continue;
			}
			String type=Type4Name.getType(name);
			String upName=upFirst(name);
			context.append("\n\t/**"+property.getRemark()+"*/");
			context.append("\n\tprivate "+type+" "+name+";");
			String imbig="import java.math.BigDecimal;\n";
			if("BigDecimal".equals(type)&&context.indexOf(imbig)==-1){
				context.insert(context.indexOf("import "), imbig);
			}
			if("Date".equals(type)){
				getSetString.append("\n\n\tpublic String get"+upName+"Str() {");
				getSetString.append("\n\t\tString "+name+"Str=\"\";");
				getSetString.append("\n\t\tif("+name+"!=null){");
				getSetString.append("\n\t\t\t"+name+"Str=DateUtils.getDateToStr(DateUtils.YYMMDD, "+name+");");
				getSetString.append("\n\t\t}");
				getSetString.append("\n\t\treturn "+name+"Str;");
				getSetString.append("\n\t}");
				String imdate="import java.util.Date;";
				if(context.indexOf(imdate)==-1){
					context.insert(context.indexOf("import "), imdate+"\n");
				}
				String platdate="import com.tarena.platform.common.utils.DateUtils;";
				if(context.indexOf(platdate)==-1){
					context.insert(context.indexOf("import "), platdate+"\n");
				}
			}
			
			getSetString.append("\n\n\tpublic "+type+" get"+upName+"() {");
			getSetString.append("\n\t\treturn "+name+";");
			getSetString.append("\n\t}");
			getSetString.append("\n\n\tpublic void set"+upName+"("+type+" "+name+") {");
			getSetString.append("\n\t\tthis."+name+" = "+name+";");
			getSetString.append("\n\t}");
		}
		context.append(getSetString);
		context.append("\n}");
		writeToFile(context.toString(), toPackageLocalPath+"api/model/"+prevClassName+"Bo.java");
	}
	/**
	 * 创建Query
	 * @throws Exception 
	 */
	private void createQuery() throws Exception{
		StringBuffer context=new StringBuffer();
		context.append("package "+packagePath+".api.model;");
		String abstractPath=findAbstractModel("Query.java");
		if(StringUtils.isNotBlank(abstractPath)){
			context.append("\nimport "+abstractPath+";");
			String abstractName=abstractPath.substring(abstractPath.lastIndexOf(".")+1);
			context.append("\npublic class "+prevClassName+"Query extends "+abstractName+" {");
		}else{
			context.append("\nimport java.io.Serializable;");
			context.append("\npublic class "+prevClassName+"Query implements Serializable {");
		}
		StringBuffer getSetString=new StringBuffer();
		for(Properties property:Properties.values()){
			String name=property.getName();
			if(!"id".equals(name)){
				continue;
			}
			String type=Type4Name.getType(name);
			String upName=upFirst(name);
			context.append("\n\t/**"+property.getRemark()+"*/");
			context.append("\n\tprivate "+type+" "+name+";");
			getSetString.append("\n\n\tpublic "+type+" get"+upName+"() {");
			getSetString.append("\n\t\treturn "+name+";");
			getSetString.append("\n\t}");
			getSetString.append("\n\n\tpublic void set"+upName+"("+type+" "+name+") {");
			getSetString.append("\n\t\tthis."+name+" = "+name+";");
			getSetString.append("\n\t}");
		}
		context.append(getSetString);
		context.append("}");
		writeToFile(context.toString(), toPackageLocalPath+"api/model/"+prevClassName+"Query.java");
	}
	/**
	 * 创建XML
	 * @throws IOException
	 */
	private void createXml() throws IOException{
		if("mysql".equals(dbType)){
			createMysqlXml();
		}else if("oracle".equals(dbType)){
			createOracleXml();
		}
	}
	/**
	 * 创建mysql-XMl
	 * @throws IOException
	 */
	private void createMysqlXml() throws IOException{
		StringBuffer context=new StringBuffer();
		context.append("");
		context.append("\n");
		context.append("\n\n");
		context.append("\n\t");
		for(Properties property:Properties.values()){
			String name=property.getName();
			if("id".equals(name)){
				context.append("\n\t\t");
			}else{
				context.append("\n\t\t");
			}
		}
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tselect *");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tfrom "+tableName);
		context.append("\n\t\twhere 1=1");
		context.append("\n\t\t");
		context.append("\n\t\t\tAND id=#{id}");
		context.append("\n\t\t");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\torder by id desc");
		context.append("\n\t\tlimit #{start}, #{pageSize}");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tselect count(1)");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tinsert into "+tableName);
		context.append("\n\t\t");
		for(Properties property:Properties.values()){
			String name=property.getName();
			if("id".equals(name)){
				continue;
			}
			String type=Type4Name.getType(name);
			if("Date".equals(type)){
				context.append("\n\t\t\t"+proToCul(name)+",");
			}else{
				context.append("\n\t\t\t"+proToCul(name)+",");
			}
		}
		context.append("\n\t\t");
		context.append("\n\t\t");
		for(Properties property:Properties.values()){
			String name=property.getName();
			if("id".equals(name)){
				continue;
			}
			String type=Type4Name.getType(name);
			if("Date".equals(type)){
				context.append("\n\t\t\t#{"+name+"},");
			}else{
				context.append("\n\t\t\t#{"+name+"},");
			}
		}
		context.append("\n\t\t");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tupdate "+tableName+" set");
		context.append("\n\t\t");
		for(Properties property:Properties.values()){
			String name=property.getName();
			if("id".equals(name)){
				continue;
			}
			String type=Type4Name.getType(name);
			if("Date".equals(type)){
				context.append("\n\t\t\t"+proToCul(name)+"=#{"+name+"},");
			}else{
				context.append("\n\t\t\t"+proToCul(name)+"=#{"+name+"},");
			}
		}
		context.append("\n\t\t");
		context.append("\n\t\t");
		context.append("\n\t\t\t");
		context.append("\n\t\t\t\t");
		context.append("\n\t\t\t\t\tid = #{id}");
		context.append("\n\t\t\t\t");
		context.append("\n\t\t\t\t");
		context.append("\n\t\t\t\t\t1 != 1");
		context.append("\n\t\t\t\t");
		context.append("\n\t\t\t");
		context.append("\n\t\t");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tdelete from "+tableName+" where id=#{id}");
		context.append("\n\t");
		context.append("\n");
		writeToFile(context.toString(), toPackageLocalPath+"dao/"+prevClassName+"MysqlDao.xml");
	}
	/**
	 * 创建oracle-XMl
	 * @throws IOException
	 */
	private void createOracleXml() throws IOException{
		StringBuffer context=new StringBuffer();
		context.append("");
		context.append("\n");
		context.append("\n\n");
		context.append("\n\t");
		for(Properties property:Properties.values()){
			String name=property.getName();
			if("id".equals(name)){
				context.append("\n\t\t");
			}else{
				context.append("\n\t\t");
			}
		}
		context.append("\n\t");
		context.append("\n\n\t");
		context.append("\n\t\tSELECT * FROM (SELECT t.*, rownum as t_rn FROM (");
		context.append("\n\t");
		context.append("\n\n\t");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tselect *");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tfrom "+tableName);
		context.append("\n\t\twhere 1=1");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\torder by id desc");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tselect count(1)");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\t#{start}");
		context.append("\n\t\t]]>");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\t");
		context.append("\n\t\t\tselect "+tableName+"_seq.nextval from dual");
		context.append("\n\t\t");
		context.append("\n\t\tinsert into "+tableName);
		context.append("\n\t\t");
		for(Properties property:Properties.values()){
			String name=property.getName();
			String type=Type4Name.getType(name);
			if("Date".equals(type)){
				context.append("\n\t\t\t"+proToCul(name)+",");
			}else{
				context.append("\n\t\t\t"+proToCul(name)+",");
			}
		}
		context.append("\n\t\t");
		context.append("\n\t\t");
		for(Properties property:Properties.values()){
			String name=property.getName();
			String type=Type4Name.getType(name);
			if("Date".equals(type)){
				context.append("\n\t\t\t#{"+name+"},");
			}else{
				context.append("\n\t\t\t#{"+name+"},");
			}
		}
		context.append("\n\t\t");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tupdate "+tableName+" set");
		context.append("\n\t\t");
		for(Properties property:Properties.values()){
			String name=property.getName();
			String type=Type4Name.getType(name);
			if("Date".equals(type)){
				context.append("\n\t\t\t"+proToCul(name)+"=#{"+name+"},");
			}else{
				context.append("\n\t\t\t"+proToCul(name)+"=#{"+name+"},");
			}
		}
		context.append("\n\t\t");
		context.append("\n\t\t");
		context.append("\n\t\t\t");
		context.append("\n\t\t\t\t");
		context.append("\n\t\t\t\t\tid = #{id}");
		context.append("\n\t\t\t\t");
		context.append("\n\t\t\t\t");
		context.append("\n\t\t\t\t\t1 != 1");
		context.append("\n\t\t\t\t");
		context.append("\n\t\t\t");
		context.append("\n\t\t");
		context.append("\n\t");
		context.append("\n\t");
		context.append("\n\t\tdelete from "+tableName+" where id=#{id}");
		context.append("\n\t");
		context.append("\n");
		writeToFile(context.toString(), toPackageLocalPath+"dao/"+prevClassName+"OracleDao.xml");
	}
	/**
	 * 创建Dao接口
	 * @throws IOException
	 */
	private void createDao() throws IOException{
		StringBuffer context=new StringBuffer();
		context.append("package "+packagePath+".dao;");
		context.append("\n\nimport java.util.List;");
		context.append("\nimport "+packagePath+".domain."+prevClassName+"Do;");
		context.append("\nimport "+packagePath+".api.model."+prevClassName+"Query;");
		context.append("\n\npublic interface "+prevClassName+"Dao {");
		context.append("\n\t/**");
		context.append("\n\t* 查询");
		context.append("\n\t* @param query");
		context.append("\n\t* @return");
		context.append("\n\t* @");
		context.append("\n\t*/");
		context.append("\n\tList<"+prevClassName+"Do> query("+prevClassName+"Query query);");
		context.append("\n\t/**");
		context.append("\n\t* 查询总数");
		context.append("\n\t* @param query");
		context.append("\n\t* @return");
		context.append("\n\t* @");
		context.append("\n\t*/");
		context.append("\n\tint queryCount("+prevClassName+"Query query);");
		context.append("\n\t/**");
		context.append("\n\t* 保存");
		context.append("\n\t* @param model");
		context.append("\n\t* @return");
		context.append("\n\t* @");
		context.append("\n\t*/");
		context.append("\n\tint save("+prevClassName+"Do model);");
		context.append("\n\t/**");
		context.append("\n\t* 修改");
		context.append("\n\t* @param model");
		context.append("\n\t* @return");
		context.append("\n\t* @");
		context.append("\n\t*/");
		context.append("\n\tint update("+prevClassName+"Do model);");
		context.append("\n\t/**");
		context.append("\n\t* 删除");
		context.append("\n\t* @param id");
		context.append("\n\t* @return");
		context.append("\n\t* @");
		context.append("\n\t*/");
		context.append("\n\tint delete("+Type4Name.getType("id")+" id);");
		context.append("\n}");
		writeToFile(context.toString(), toPackageLocalPath+"dao/"+prevClassName+"Dao.java");
	}
	/**
	 * 创建Service接口
	 * @throws IOException
	 */
	private void createService() throws IOException{
		StringBuffer context=new StringBuffer();
		context.append("package "+packagePath+".service;");
		context.append("\n\nimport java.util.List;");
		context.append("\nimport "+packagePath+".domain."+prevClassName+"Do;");
		context.append("\nimport "+packagePath+".api.model."+prevClassName+"Query;");
		context.append("\n\npublic interface "+prevClassName+"Service {");
		context.append("\n\t/**");
		context.append("\n\t* 查询");
		context.append("\n\t* @param query");
		context.append("\n\t* @return");
		context.append("\n\t* @");
		context.append("\n\t*/");
		context.append("\n\tList<"+prevClassName+"Do> query("+prevClassName+"Query query);");
		context.append("\n\t/**");
		context.append("\n\t* 查询总数");
		context.append("\n\t* @param query");
		context.append("\n\t* @return");
		context.append("\n\t* @");
		context.append("\n\t*/");
		context.append("\n\tint queryCount("+prevClassName+"Query query);");
		context.append("\n\t/**");
		context.append("\n\t* 保存");
		context.append("\n\t* @param model");
		context.append("\n\t* @return");
		context.append("\n\t* @");
		context.append("\n\t*/");
		context.append("\n\tint save("+prevClassName+"Do model);");
		context.append("\n\t/**");
		context.append("\n\t* 修改");
		context.append("\n\t* @param model");
		context.append("\n\t* @return");
		context.append("\n\t* @");
		context.append("\n\t*/");
		context.append("\n\tint update("+prevClassName+"Do model);");
		context.append("\n\t/**");
		context.append("\n\t* 删除");
		context.append("\n\t* @param id");
		context.append("\n\t* @return");
		context.append("\n\t* @");
		context.append("\n\t*/");
		context.append("\n\tint delete("+Type4Name.getType("id")+" id);");
		context.append("\n}");
		writeToFile(context.toString(), toPackageLocalPath+"service/"+prevClassName+"Service.java");
	}
	/**
	 * 创建ServiceImpl,接口实现
	 * @throws IOException
	 */
	private void createServiceImpl() throws IOException{
		StringBuffer context=new StringBuffer();
		String lowPrevClassName=lowFirst(prevClassName);
		context.append("package "+packagePath+".service.impl;");
		context.append("\n\nimport java.util.List;");
		context.append("\nimport javax.annotation.Resource;");
		context.append("\nimport org.springframework.stereotype.Service;");
		context.append("\nimport "+packagePath+".dao."+prevClassName+"Dao;");
		context.append("\nimport "+packagePath+".domain."+prevClassName+"Do;");
		context.append("\nimport "+packagePath+".service."+prevClassName+"Service;");
		context.append("\nimport "+packagePath+".api.model."+prevClassName+"Query;");
		context.append("\n\n@Service");
		context.append("\npublic class "+prevClassName+"ServiceImpl implements "+prevClassName+"Service {");
		context.append("\n\n\t@Resource");
		context.append("\n\tprivate "+prevClassName+"Dao "+lowPrevClassName+"Dao;");
		context.append("\n\n\t@Override");
		context.append("\n\tpublic int save("+prevClassName+"Do model) {");
		context.append("\n\t\treturn "+lowPrevClassName+"Dao.save(model);");
		context.append("\n\t}");
		context.append("\n\n\t@Override");
		context.append("\n\tpublic int update("+prevClassName+"Do model) {");
		context.append("\n\t\treturn "+lowPrevClassName+"Dao.update(model);");
		context.append("\n\t}");
		context.append("\n\n\t@Override");
		context.append("\n\tpublic List<"+prevClassName+"Do> query("+prevClassName+"Query query) {");
		context.append("\n\t\treturn "+lowPrevClassName+"Dao.query(query);");
		context.append("\n\t}");
		context.append("\n\n\t@Override");
		context.append("\n\tpublic int queryCount("+prevClassName+"Query query) {");
		context.append("\n\t\treturn "+lowPrevClassName+"Dao.queryCount(query);");
		context.append("\n\t}");
		context.append("\n\n\t@Override");
		context.append("\n\tpublic int delete("+Type4Name.getType("id")+" id) {");
		context.append("\n\t\treturn "+lowPrevClassName+"Dao.delete(id);");
		context.append("\n\t}");
		context.append("\n}");
		writeToFile(context.toString(), toPackageLocalPath+"service/impl/"+prevClassName+"ServiceImpl.java");
	}
	/**
	 * 创建Api接口
	 * @throws IOException 
	 */
	private void createApi() throws IOException{
		StringBuffer context=new StringBuffer();
		context.append("package "+packagePath+".api;");
		context.append("\n\nimport "+packagePath+".api.model."+prevClassName+"Bo;");
		context.append("\nimport "+packagePath+".api.model."+prevClassName+"Query;");
		context.append("\nimport com.tarena.platform.common.model.PageDataModel;");
		context.append("\npublic interface "+prevClassName+"Api {");
		context.append("\n\t/**");
		context.append("\n\t * 列表查询");
		context.append("\n\t * @param query");
		context.append("\n\t * @return");
		context.append("\n\t * @throws Exception");
		context.append("\n\t */");
		context.append("\n\tPageDataModel<"+prevClassName+"Bo> query("+prevClassName+"Query query);");
		context.append("\n\t/**");
		context.append("\n\t * 保存");
		context.append("\n\t * @param model");
		context.append("\n\t * @return");
		context.append("\n\t * @throws Exception");
		context.append("\n\t */");
		context.append("\n\tint save("+prevClassName+"Bo model);");
		context.append("\n\t/**");
		context.append("\n\t * 修改");
		context.append("\n\t * @param model");
		context.append("\n\t * @return");
		context.append("\n\t * @throws Exception");
		context.append("\n\t */");
		context.append("\n\tint update("+prevClassName+"Bo model);");
		context.append("\n\t/**");
		context.append("\n\t * 删除");
		context.append("\n\t * @param id");
		context.append("\n\t * @return");
		context.append("\n\t * @throws Exception");
		context.append("\n\t */");
		context.append("\n\tint delete("+Type4Name.getType("id")+" id);");
		context.append("\n}");
		writeToFile(context.toString(), toPackageLocalPath+"api/"+prevClassName+"Api.java");
	}
	/**
	 * 创建Facade
	 * @throws IOException 
	 */
	private void createFacade() throws IOException{
		StringBuffer context=new StringBuffer();
		String lowPrevClassName=lowFirst(prevClassName);
		context.append("package "+packagePath+".facade;");
		context.append("\n\nimport java.util.List;");
		context.append("\nimport javax.annotation.Resource;");
		context.append("\nimport org.springframework.stereotype.Service;");
		context.append("\nimport "+packagePath+".api."+prevClassName+"Api;");
		context.append("\nimport "+packagePath+".api.model."+prevClassName+"Bo;");
		context.append("\nimport "+packagePath+".api.model."+prevClassName+"Query;");
		context.append("\nimport "+packagePath+".domain."+prevClassName+"Do;");
		context.append("\nimport "+packagePath+".service."+prevClassName+"Service;");
		context.append("\nimport com.tarena.platform.common.model.PageDataModel;");
		context.append("\n@Service");
		context.append("\npublic class "+prevClassName+"Facade implements "+prevClassName+"Api {");
		context.append("\n\t@Resource");
		context.append("\n\tprivate "+prevClassName+"Service "+lowPrevClassName+"Service;");
		context.append("\n\n\t@Override");
		context.append("\n\tpublic PageDataModel<"+prevClassName+"Bo> query("+prevClassName+"Query query) {");
		context.append("\n\t\tPageDataModel<"+prevClassName+"Bo> pdm = new PageDataModel<"+prevClassName+"Bo>();");
		context.append("\n\t\tList<"+prevClassName+"Do> doList = "+lowPrevClassName+"Service.query(query);");
		context.append("\n\t\tList<"+prevClassName+"Bo> bolist = "+prevClassName+"Do.doToBo(doList);");
		context.append("\n\t\tpdm.setData(bolist);");
		context.append("\n\t\tint count = "+lowPrevClassName+"Service.queryCount(query);");
		context.append("\n\t\tpdm.setRecordsFiltered(count);");
		context.append("\n\t\tpdm.setRecordsTotal(count);");
		context.append("\n\t\treturn pdm;");
		context.append("\n\t}");
		context.append("\n\n\t@Override");
		context.append("\n\tpublic int save("+prevClassName+"Bo model) {");
		context.append("\n\t\t"+prevClassName+"Do doModel = "+prevClassName+"Do.boToDo(model);");
		context.append("\n\t\treturn  "+lowPrevClassName+"Service.save(doModel);");
		context.append("\n\t}");
		context.append("\n\n\t@Override");
		context.append("\n\tpublic int update("+prevClassName+"Bo model) {");
		context.append("\n\t\t"+prevClassName+"Do doModel = "+prevClassName+"Do.boToDo(model);");
		context.append("\n\t\treturn "+lowPrevClassName+"Service.update(doModel);");
		context.append("\n\t}");
		context.append("\n\n\t@Override");
		context.append("\n\tpublic int delete("+Type4Name.getType("id")+" id) {");
		context.append("\n\t\treturn "+lowPrevClassName+"Service.delete(id);");
		context.append("\n\t}");
		context.append("\n}");
		writeToFile(context.toString(), toPackageLocalPath+"facade/"+prevClassName+"Facade.java");
	}
	@SuppressWarnings("rawtypes")
	private void createController() throws Exception{
		StringBuffer context=new StringBuffer();
		String lowPrevClassName=lowFirst(prevClassName);
		String lowKeyWord=lowFirst(keyWord);
		String abstractPath=findAbstractModel("Bo.java");
		String createidType="";
		String updateidType="";
		if(abstractPath!=null){
			Class aa=Class.forName(abstractPath);
			Field[] fields = aa.getDeclaredFields();
			for (Field field : fields) {
				field.setAccessible(true);
				for(Properties property:Properties.values()){
					if("common".equals(property.getSpecial())
							&&field.getName().equals(property.getName())
							){
						if("创建人id".equals(property.getRemark())){
							String typeName=field.getType().getName();
							createidType=typeName.substring(typeName.lastIndexOf(".")+1);
						}
						if("更新人id".equals(property.getRemark())){
							String typeName=field.getType().getName();
							updateidType=typeName.substring(typeName.lastIndexOf(".")+1);
						}
					}
				}
			}
		}else{
			for(Properties property:Properties.values()){
				if("common".equals(property.getSpecial())){
					if("创建人id".equals(property.getRemark())){
						createidType=Type4Name.getType(property.getName());
						continue;
					}
					if("更新人id".equals(property.getRemark())){
						updateidType=Type4Name.getType(property.getName());
					}
				}
			}
		}
		context.append("package "+consoleBasePackagePath+".controller;");
		context.append("\nimport java.util.Date;");
		context.append("\nimport javax.annotation.Resource;");
		context.append("\nimport org.slf4j.Logger;");
		context.append("\nimport org.slf4j.LoggerFactory;");
		context.append("\nimport org.springframework.stereotype.Controller;");
		context.append("\nimport org.springframework.ui.Model;");
		context.append("\nimport org.springframework.web.bind.WebDataBinder;");
		context.append("\nimport org.springframework.web.bind.annotation.InitBinder;");
		context.append("\nimport org.springframework.web.bind.annotation.RequestMapping;");
		context.append("\nimport org.springframework.web.bind.annotation.RequestParam;");
		context.append("\nimport org.springframework.web.bind.annotation.ResponseBody;");
		context.append("\nimport "+packagePath+".api."+prevClassName+"Api;");
		context.append("\nimport "+packagePath+".api.model."+prevClassName+"Bo;");
		context.append("\nimport "+packagePath+".api.model."+prevClassName+"Query;");
		context.append("\nimport com.tarena.platform.base.shiro.token.manager.TokenManager;");
		context.append("\nimport com.tarena.platform.common.model.PageDataModel;");
		context.append("\nimport com.tarena.platform.common.utils.DateEditorUtil;");
		context.append("\nimport com.tarena.platform.system.user.api.model.PlatformUserBo;");
		context.append("\n@Controller");
		context.append("\n@RequestMapping(\""+lowKeyWord+"\")");
		context.append("\npublic class "+prevClassName+"Controller {");
		context.append("\n\n\tprivate static final Logger logger = LoggerFactory.getLogger("+prevClassName+"Controller.class);");
		context.append("\n\n\t@Resource");
		context.append("\n\tprivate "+prevClassName+"Api "+lowPrevClassName+"Api;");
		context.append("\n\n\t@InitBinder");
		context.append("\n\tprotected void initBinder(WebDataBinder binder) throws Exception {");
		context.append("\n\t\tbinder.registerCustomEditor(Date.class, new DateEditorUtil());");
		context.append("\n\t}");
		context.append("\n\n\t@RequestMapping(\"index\")");
		context.append("\n\tpublic String index(){");
		context.append("\n\t\treturn \""+packageName+"/jsp/"+lowKeyWord+"List\";");
		context.append("\n\t}");
		context.append("\n\t/**");
		context.append("\n\t * @Description 列表");
		context.append("\n\t * @param query");
		context.append("\n\t * @return");
		context.append("\n\t*/");
		context.append("\n\t@RequestMapping(\"/list\")");
		context.append("\n\t@ResponseBody");
		context.append("\n\tpublic PageDataModel<"+prevClassName+"Bo> list("+prevClassName+"Query query){");
		context.append("\n\t\tPageDataModel<"+prevClassName+"Bo> pdm = null;");
		context.append("\n\t\ttry {");
		context.append("\n\t\t\tpdm = "+lowPrevClassName+"Api.query(query);");
		context.append("\n\t\t} catch (Exception e) {");
		context.append("\n\t\t\tlogger.error(\""+prevClassName+"Controller list error : \" , e );");
		context.append("\n\t\t}");
		context.append("\n\t\treturn pdm;");
		context.append("\n\t}");
		context.append("\n\t/**");
		context.append("\n\t * @Description 跳转到新建页面");
		context.append("\n\t * @param model");
		context.append("\n\t * @return");
		context.append("\n\t*/");
		context.append("\n\t@RequestMapping(\"/toSavePage\")");
		context.append("\n\tpublic String toSavePage(Model model){");
		context.append("\n\t\tmodel.addAttribute(\"new_or_edit\", \"create\");");
		context.append("\n\t\tmodel.addAttribute(\"action\", \""+lowKeyWord+"/save\");");
		context.append("\n\t\treturn \""+packageName+"/jsp/"+lowKeyWord+"Edit\";");
		context.append("\n\t}");
		context.append("\n\t/**");
		context.append("\n\t * @Description 添加");
		context.append("\n\t * @param model");
		context.append("\n\t * @return");
		context.append("\n\t*/");
		context.append("\n\t@RequestMapping(\"/save\")");
		context.append("\n\t@ResponseBody");
		context.append("\n\tpublic int save("+prevClassName+"Bo model){");
		context.append("\n\t\tint count = 0;");
		context.append("\n\t\ttry {");
		context.append("\n\t\t\tPlatformUserBo user = TokenManager.getToken();");
		context.append("\n\t\t\tDate date=new Date();");
		context.append("\n\t\t\tmodel.setUpdateUserid("+updateidType+".valueOf(user.getId()));");
		context.append("\n\t\t\tmodel.setCreateUserid("+createidType+".valueOf(user.getId()));");
		context.append("\n\t\t\tmodel.setCreateDate(date);");
		context.append("\n\t\t\tmodel.setUpdateDate(date);");
		context.append("\n\t\t\tcount = "+lowPrevClassName+"Api.save(model);");
		context.append("\n\t\t} catch (Exception e) {");
		context.append("\n\t\t\tlogger.error(\""+prevClassName+"Controller save error : \" , e );");
		context.append("\n\t\t}");
		context.append("\n\t\treturn count;");
		context.append("\n\t}");
		context.append("\n\t/**");
		context.append("\n\t * @Description 跳转到详情页面");
		context.append("\n\t * @param model");
		context.append("\n\t * @param query");
		context.append("\n\t * @return");
		context.append("\n\t*/");
		context.append("\n\t@RequestMapping(\"/toDetailPage\")");
		context.append("\n\tpublic String toDetailPage(Model model,"+prevClassName+"Query query){");
		context.append("\n\t\ttry {");
		context.append("\n\t\t\tif(query.getId()!=null&&query.getId()>=0){");
		context.append("\n\t\t\t\t"+prevClassName+"Bo boModel = "+lowPrevClassName+"Api.query(query).getData().get(0);");
		context.append("\n\t\t\t\tmodel.addAttribute(\"boModel\", boModel);");
		context.append("\n\t\t\t}");
		context.append("\n\t\t\treturn \""+packageName+"/jsp/"+lowKeyWord+"Detail\";");
		context.append("\n\t\t} catch (Exception e) {");
		context.append("\n\t\t\tlogger.error(\""+prevClassName+"Controller toDetailPage error : \" , e);");
		context.append("\n\t\t}");
		context.append("\n\t\treturn null;");
		context.append("\n\t}");
		context.append("\n\t/**");
		context.append("\n\t * @Description 跳转到修改页面");
		context.append("\n\t * @param model");
		context.append("\n\t * @param id");
		context.append("\n\t * @return");
		context.append("\n\t*/");
		context.append("\n\t@RequestMapping(\"/toEditPage\")");
		context.append("\n\tpublic String toEditPage(Model model,"+prevClassName+"Query query){");
		context.append("\n\t\ttry {");
		context.append("\n\t\t\tif(query.getId()!=null&&query.getId()>=0){");
		context.append("\n\t\t\t\t"+prevClassName+"Bo boModel = "+lowPrevClassName+"Api.query(query).getData().get(0);");
		context.append("\n\t\t\t\tmodel.addAttribute(\"boModel\", boModel);");
		context.append("\n\t\t\t}");
		context.append("\n\t\t\tmodel.addAttribute(\"new_or_edit\", \"edit\");");
		context.append("\n\t\t\tmodel.addAttribute(\"action\", \""+lowKeyWord+"/edit\");");
		context.append("\n\t\t\treturn \""+packageName+"/jsp/"+lowKeyWord+"Edit\";");
		context.append("\n\t\t} catch (Exception e) {");
		context.append("\n\t\t\tlogger.error(\""+prevClassName+"Controller toEditPage error : \" , e);");
		context.append("\n\t\t}");
		context.append("\n\t\treturn null;");
		context.append("\n\t}");
		context.append("\n\t/**");
		context.append("\n\t * @Description 修改");
		context.append("\n\t * @param model");
		context.append("\n\t * @param id");
		context.append("\n\t * @return");
		context.append("\n\t*/");
		context.append("\n\t@RequestMapping(\"/edit\")");
		context.append("\n\t@ResponseBody");
		context.append("\n\tpublic int edit("+prevClassName+"Bo model) {");
		context.append("\n\t\tint count = 0;");
		context.append("\n\t\ttry {");
		context.append("\n\t\t\tPlatformUserBo user = TokenManager.getToken();");
		context.append("\n\t\t\tmodel.setUpdateUserid("+updateidType+".valueOf(user.getId()));");
		context.append("\n\t\t\tmodel.setUpdateDate(new Date());");
		context.append("\n\t\t\tcount = "+lowPrevClassName+"Api.update(model);");
		context.append("\n\t\t} catch (Exception e) {");
		context.append("\n\t\t\tlogger.error(\""+prevClassName+"Controller edit error : \" , e );");
		context.append("\n\t\t}");
		context.append("\n\t\treturn count;");
		context.append("\n\t}");
		context.append("\n\t/**");
		context.append("\n\t * @Description 删除");
		context.append("\n\t * @param id");
		context.append("\n\t * @return");
		context.append("\n\t*/");
		context.append("\n\t@RequestMapping(\"/delete\")");
		context.append("\n\t@ResponseBody");
		context.append("\n\tpublic int delete(@RequestParam(value=\"ids[]\")Long[] ids){");
		context.append("\n\t\tint count=0;");
		context.append("\n\t\ttry {");
		context.append("\n\t\t\tfor(Long id:ids){");
		context.append("\n\t\t\t\t"+lowPrevClassName+"Api.delete(id);");
		context.append("\n\t\t\t\tcount++;");
		context.append("\n\t\t\t}");
		context.append("\n\t\t\treturn count;");
		context.append("\n\t\t} catch (Exception e) {");
		context.append("\n\t\t\tlogger.error(\""+prevClassName+"Controller delete error : \" , e );");
		context.append("\n\t\t\treturn 0;");
		context.append("\n\t\t}");
		context.append("\n\t}");
		context.append("\n}");
		writeToFile(context.toString(), consoleLoaclPath+"controller/"+prevClassName+"Controller.java");
	}
	/**
	 * 创建list Jsp
	 * @throws IOException
	 */
	private void createListJsp() throws IOException{
		StringBuffer context=new StringBuffer();
		String lowKeyWord=lowFirst(keyWord);
		context.append("<%@ page language=\"java\"  pageEncoding=\"UTF-8\"%>");
		context.append("\n<%@ taglib uri=\"http://shiro.apache.org/tags\" prefix=\"shiro\"%>");
		context.append("\n<%@ taglib uri=\"http://www.tedu.cn\" prefix=\"ta\"%>");
		context.append("\n");
		context.append("\n");
		context.append("\n");
		context.append("\n\t<%@ include file=\"../../../common/jsp/header.jsp\"%> ");
		context.append("\n\t");
		context.append("\n");
		context.append("\n");
		context.append("\n\t
"); context.append("\n\t\t
"); context.append("\n\t\t\t
"); context.append("\n\t\t\t\t
"); context.append("\n\t\t\t\t\t
"); context.append("\n\t\t\t\t\t\t
"); context.append("\n\t\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t\t
"); context.append("\n\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t
"); context.append("\n\t\t\t\t
"); context.append("\n\t\t\t\t
"); context.append("\n\t\t\t\t\t"); context.append("\n\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t"); context.append("\n\t\t\t\t\t"); context.append("\n\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t"); context.append("\n\t\t\t\t\t"); context.append("\n\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t"); context.append("\n\t\t\t\t
"); context.append("\n\t\t\t
"); context.append("\n\t\t
"); context.append("\n\t\t
"); context.append("\n\t\t\t
"); context.append("\n\t\t\t\t"); context.append("\n\t\t\t\t\t"); context.append("\n\t\t\t\t\t"); context.append("\n\t\t\t\t\t"); context.append("\n\t\t\t\t\t"); context.append("\n\t\t\t\t
"); context.append("\n\t\t\t
"); context.append("\n\t\t
"); context.append("\n\t
"); context.append("\n\t<%@ include file=\"../../../common/jsp/footer.jsp\"%>"); context.append("\n\t"); context.append("\n"); context.append("\n"); writeToFile(context.toString(), jspLoaclPath+lowFirst(prevClassName)+"List.jsp"); } /** * 创建edit jsp * @throws IOException */ private void createEditJsp() throws IOException{ StringBuffer context=new StringBuffer(); context.append("<%@ page language=\"java\" pageEncoding=\"UTF-8\"%>"); context.append("\n<%@ taglib uri=\"http://www.tedu.cn\" prefix=\"ta\"%>"); context.append("\n"); context.append("\n"); context.append("\n"); context.append("\n\t<%@ include file=\"../../../common/jsp/header.jsp\"%>"); context.append("\n\t<ta:local key=\"platform.international.menu.edit\"/>"); context.append("\n"); context.append("\n"); context.append("\n
"); context.append("\n\t
"); context.append("\n\t\t
"); context.append("\n\t\t\t"); context.append("\n\t\t\t"); context.append("\n\t\t
"); context.append("\n\t
"); context.append("\n
"); context.append("\n
"); context.append("\n\t
"); context.append("\n\t\t
"); context.append("\n\t\t\t
"); Properties[] properties=Properties.values(); List dates=new ArrayList<>(); for(int i=0;i=properties.length?null:properties[i+1]; if("Date".equals(Type4Name.getType(property.getName())) ||(property1!=null&&"Date".equals(Type4Name.getType(property1.getName())))){ String date="date_"+i; dates.add(date); context.append("\n\t\t\t\t
"); }else{ context.append("\n\t\t\t\t
"); } proCulHtml(context, property); proCulHtml(context, property1); context.append("\n\t\t\t\t
"); } context.append("\n\t\t\t"); context.append("\n\t\t
"); context.append("\n\t
"); context.append("\n
"); context.append("\n"); context.append("\n<%@ include file=\"../../../common/jsp/footer.jsp\"%>"); context.append("\n"); context.append("\n"); writeToFile(context.toString(), jspLoaclPath+lowFirst(prevClassName)+"Edit.jsp"); } private void proCulHtml(StringBuffer context,Properties property){ if(property==null){ return; } context.append("\n\t\t\t\t\t"); if("Date".equals(Type4Name.getType(property.getName()))){ context.append("\n\t\t\t\t\t
"); context.append("\n\t\t\t\t\t\t
"); context.append("\n\t\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t\t
"); context.append("\n\t\t\t\t\t
"); }else{ context.append("\n\t\t\t\t\t
"); context.append("\n\t\t\t\t\t\t"); context.append("\n\t\t\t\t\t
"); } } /** * 创建detail jsp * @throws IOException */ private void createDetailJsp() throws IOException{ StringBuffer context=new StringBuffer(); context.append("<%@ page language=\"java\" pageEncoding=\"UTF-8\"%>"); context.append("\n<%@ taglib uri=\"http://shiro.apache.org/tags\" prefix=\"shiro\"%>"); context.append("\n<%@ taglib uri=\"http://www.tedu.cn\" prefix=\"ta\"%>"); context.append("\n"); context.append("\n"); context.append("\n"); context.append("\n"); context.append("\n"); context.append("\n<%@ include file=\"../../../common/jsp/header.jsp\"%>"); context.append("\n"); context.append("\n"); context.append("\n
"); context.append("\n
"); context.append("\n\t
"); context.append("\n\t\t
"); context.append("\n\t\t\t
"); context.append("\n\t\t\t\t"); context.append("\n\t\t\t
"); context.append("\n\t\t
"); Properties[] properties=Properties.values(); for(int i=0;i=properties.length?null:properties[i+1]; context.append("\n\t\t
"); context.append("\n\t\t\t"); context.append("\n\t\t\t"); context.append("\n\t\t\t

${boModel."+property.getName()+"}

"); if(property1!=null){ context.append("\n\t\t\t"); context.append("\n\t\t\t"); context.append("\n\t\t\t

${boModel."+property1.getName()+"}

"); } context.append("\n\t\t
"); } context.append("\n\t
"); context.append("\n
"); context.append("\n
"); context.append("\n<%@ include file=\"../../../common/jsp/footer.jsp\"%>"); context.append("\n"); context.append("\n"); writeToFile(context.toString(), jspLoaclPath+lowFirst(prevClassName)+"Detail.jsp"); } /** * 控制台输出sql */ private void systemOutSql(){ if("mysql".equals(dbType)){ systemOutMysqlSql(); }else if("oracle".equals(dbType)){ systemOutOracleSql(); } } /** * 控制台输出mysql sql */ private void systemOutMysqlSql(){ System.out.println("--------建表Sql-------"); StringBuffer sql=new StringBuffer("TABLE `tts_series_class` ("); sql.append("\n`id` int(10) NOT NULL AUTO_INCREMENT,"); for(Properties Property:Properties.values()){ String culName=proToCul(Property.getName()).toLowerCase(); if("id".equals(Property.getName())){ continue; } sql.append("\n`"+culName+"` "+Type4Name.getMysqlDbType(Property.getName())+"(100),"); } sql.append("\nPRIMARY KEY (`id`)"); sql.append("\n) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;"); System.out.println(sql.toString()); } /** * 控制台输出oracle sql */ private void systemOutOracleSql(){ System.out.println("--------建表Sql-------"); StringBuffer res=new StringBuffer("CREATE TABLE \""+tableName.toUpperCase()+"\"(\n"); for(Properties Property:Properties.values()){ String culName=proToCul(Property.getName()).toUpperCase(); String dbtype=Type4Name.getOracleDbType(Property.getName()); String type=""; if("id".equals(Property.getName())){ type="NUMBER(10) NOT NULL primary key"; }else if("Date".equals(dbtype)){ type="Date"; }else{ type=dbtype+"(100)"; } res.append("\t"+culName+" "+type+",\n"); } String resStr=res.toString().substring(0, res.length()-2); resStr+="\n);"; System.out.println(resStr); System.out.println("--------序列Sql-------"); StringBuffer seq=new StringBuffer(); seq.append("\ncreate sequence \""+tableName.toUpperCase()+"_SEQ\""); seq.append("\nminvalue 1 --最小值"); seq.append("\nnomaxvalue --不设置最大值(由机器决定),或 根据表字段的值范围设置 maxvalue"); seq.append("\nmaxvalue 9999999999999999999999999999 -- 最大值"); seq.append("\nstart with 1 --从1开始计数,数值可变"); seq.append("\nincrement by 1 --每次加1,数值可变"); seq.append("\nnocycle --一直累加,不循环;cycle:达到最大值后,将从头开始累加"); seq.append("\nnocache;"); System.out.println(seq.toString()); } /** * 首字母大写 * @param str * @return */ private String upFirst(String str){ char[] cs=str.toCharArray(); if(Character.isUpperCase(cs[0])){ return str; } cs[0]-=32; return String.valueOf(cs); } /** * 首字母小写 * @param str * @return */ private String lowFirst(String str){ char[] cs=str.toCharArray(); if(Character.isLowerCase(cs[0])){ return str; } cs[0]+=32; return String.valueOf(cs); } /** * 根据字段名获取数据类型 */ public enum Type4Name{ A("id","Long","int","NUMBER"), C("date","Date","datetime","Date"), D("time","Date","datetime","Date"), D1("amount","Double","double","NUMBER"), D2("money","BigDecimal","numeric","NUMBER"), D3("price","BigDecimal","numeric","NUMBER"), D4("num","Integer","int","NUMBER"), D5("number","Integer","int","NUMBER"), D6("count","Integer","int","NUMBER"), D7("sum","Integer","int","NUMBER"); /**字段名*/ private String name; /**数据类型*/ private String type; /**mysql数据库类型*/ private String mysqlDbType; /**oracle数据库类型*/ private String oracleDbType; private Type4Name(String name,String type,String mysqlDbType,String oracleDbType){ this.name=name; this.type=type; this.mysqlDbType=mysqlDbType; this.oracleDbType=oracleDbType; } public static String getType(String name) { if(StringUtils.isBlank(name)){ return null; } for(Type4Name type4Name:Type4Name.values()){ if(name.toLowerCase().endsWith(type4Name.getName())){ return type4Name.getType(); } } return "String"; } public static String getMysqlDbType(String name) { if(StringUtils.isBlank(name)){ return null; } for(Type4Name type4Name:Type4Name.values()){ if(name.toLowerCase().endsWith(type4Name.getName())){ return type4Name.getMysqlDbType(); } } return "varchar"; } public static String getOracleDbType(String name) { if(StringUtils.isBlank(name)){ return null; } for(Type4Name type4Name:Type4Name.values()){ if(name.toLowerCase().endsWith(type4Name.getName())){ return type4Name.getOracleDbType(); } } return "VARCHAR2"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getMysqlDbType() { return mysqlDbType; } public void setMysqlDbType(String mysqlDbType) { this.mysqlDbType = mysqlDbType; } public String getOracleDbType() { return oracleDbType; } public void setOracleDbType(String oracleDbType) { this.oracleDbType = oracleDbType; } } /** * 驼峰名改为下划线字段名 * @param str * @return */ private static String proToCul(String str){ for(int i=0;i fileList=findFile(path, fileName, 10); List list=new ArrayList<>(); for(File file:fileList){ String abstractName=getExtendName(file); list.add(abstractName); } return findMostString(list); } /** * 查出某路径符合文件名的数个文件(查找数据样本) * @param path * @param fileName * @param fileNum * @return */ private static List findFile(String path,String fileName,int fileNum){ File file=new File(path); List fileList=new ArrayList<>(); if(file==null||fileName==null||"".equals(fileName)){ return null; } if(file.isFile()&&file.getName().endsWith(fileName)){ fileList.add(file); return fileList; } if(file.isFile()){ return null; } return getAllFilePaths(file, fileList, fileNum,fileName); } private static List getAllFilePaths(File filePath,List fileList,int fileNum,String fileName){ if(fileList.size()>=fileNum){ return fileList; } File[] files = filePath.listFiles(); if(files == null){ return fileList; } for(File f:files){ if(f.isFile()&&f.getName().endsWith(fileName)){ fileList.add(f); }else{ getAllFilePaths(f,fileList,fileNum,fileName); } } return fileList; } /**查出出现次数最多的字符串*/ private static String findMostString(List list){ Set checkSet=new HashSet<>(); Map map=new HashMap<>(); for(String str:list){ if(StringUtils.isBlank(str)){ continue; } if(checkSet.add(str)){ map.put(str, 1); }else{ map.put(str, map.get(str)+1); } } int sum=0; String res=null; for(String key:checkSet){ int subSum=map.get(key); if(sum==0){ res=key; sum=subSum; }else if(subSum>sum){ res=key; sum=subSum; } } return res; } /** * 查出类中所继承的父类全路径 * @param file * @return * @throws Exception */ @SuppressWarnings("resource") private static String getExtendName(File file) throws Exception{ FileInputStream inputStream=new FileInputStream(file); byte[] data=new byte[1024]; StringBuffer stringBuffer=new StringBuffer(); while(inputStream.read(data)!=-1){ stringBuffer.append(new String(data)); } String fileText=stringBuffer.toString(); String resStr=getRegString(" extends [a-z,A-Z]* ", fileText); if(StringUtils.isBlank(resStr)){ return null; } String extendName=resStr.replace(" extends ", "").trim(); resStr=getRegString("import [a-z,.]*"+extendName, fileText); return resStr.replace("import ", "").trim(); } /** * 返回符合正则表达式的第一个子字符串 * @param reg * @param str * @return */ private static String getRegString(String reg,String str){ Pattern p = Pattern.compile(reg); Matcher m = p.matcher(str); while(m.find()){ return m.group(); } return null; } /**创建写入文件*/ private static void writeToFile(String text, String filePath) throws IOException { String dirPath=filePath.substring(0, filePath.lastIndexOf("/")); File dir=new File(dirPath); if(!dir.exists()){ dir.mkdirs(); } File file = new File(filePath); file.createNewFile(); OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); BufferedWriter bw = new BufferedWriter(fw); bw.write(text); bw.flush(); bw.close(); fw.close(); } /** * 自动检索系统前缀名 */ private static void initPrevName(){ String path=basePackageLocalPath+basePackagePath.replace(".", "/")+"/"; List fileList=findFile(path, "Api.java", 20); List sameList=new ArrayList<>(); for(int i=0;i=fileList.size()-1){ break; } String fileName=fileList.get(i).getName(); String fileName1=fileList.get(i+1).getName(); byte[] nameData=fileName.getBytes(); byte[] nameData1=fileName1.getBytes(); byte[] sameData=new byte[20]; for(int ii=0;ii fileList=findFile(basePackageLocalPath, "Api.java", 10); List pathList=new ArrayList<>(); for(File file:fileList){ try { pathList.add(getClassBasePackagePath(".api;",file)); } catch (IOException e) { e.printStackTrace(); } } basePackagePath=findMostString(pathList); } /** * 获取类包根路径 * @param file * @return * @throws IOException */ @SuppressWarnings("resource") private static String getClassBasePackagePath(String endPath,File file) throws IOException{ FileInputStream inputStream=new FileInputStream(file); byte[] data=new byte[1024]; StringBuffer stringBuffer=new StringBuffer(); while(inputStream.read(data)!=-1){ stringBuffer.append(new String(data)); } String fileText=stringBuffer.toString(); String resStr=getRegString("package [a-zA-Z.]{1,100};", fileText); resStr=resStr.replace(endPath, "").replace("package ", ""); return resStr.substring(0, resStr.lastIndexOf(".")); } /** * 自动检测项目数据库类型 */ private static void initDbType(){ String sourcePath=System.getProperty("user.dir").replace("\\", "/"); sourcePath=sourcePath.substring(0, sourcePath.lastIndexOf("/")+1) +webProjectName+"/src/main/resources/jdbc.properties"; java.util.Properties prop = new java.util.Properties(); try { prop.load(new FileInputStream(new File(sourcePath))); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } dbType=prop.getProperty("jdbc.source").toLowerCase(); } /** * 自动检测controller项目包路径 */ private static void initConsoleBasePath(){ String sourcePath=System.getProperty("user.dir").replace("\\", "/"); sourcePath=sourcePath.substring(0, sourcePath.lastIndexOf("/")+1) +consoleProjectName+"/src/main/java/"; List fileList=findFile(sourcePath, "Controller.java", 10); List pathList=new ArrayList<>(); for(File file:fileList){ try { pathList.add(getClassBasePackagePath(".controller;",file)); } catch (IOException e) { e.printStackTrace(); } } consoleBasePackagePath=findMostString(pathList); consoleBasePackagePath=consoleBasePackagePath+"."+packageName; consoleLoaclPath=sourcePath+consoleBasePackagePath.replace(".", "/")+"/"; } /** * 自动检测jsp项目包本地路径 */ private static void initJspBasePath(){ String sourcePath=System.getProperty("user.dir").replace("\\", "/"); sourcePath=sourcePath.substring(0, sourcePath.lastIndexOf("/")+1) +webProjectName+"/src/main/webapp/WEB-INF/"; List fileList=findFile(sourcePath, "List.jsp", 20); List sameList=new ArrayList<>(); for(int i=0;i

你可能感兴趣的:(个人记录)