近日事情不多,自己也一直有想开发一个代码生成工具的想法,既然我们是搬砖的,搬砖这个动作就是很重复性的动作了,就必然有一些东西能够封装起来,部门的互联网项目适用性不高,但是开发集团内部的企业应用的项目组来说功能还是很强大的。
说干就干,用了三天左右的时间开发完成,耦合度很低,将工具复制到项目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 ");
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");
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