自动生成facade,service,dao 工具
工具类
import com.cmb.ccrm.tool.base.util.StringUtil;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.Context;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.XMLParserException;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author CS03982
* @version V1.0
* @ProjectName lc07-customer-internalinfo
* @ClassName
* @CreateDate 2018/10/30 15:31
* @Modifier
* @ModifyDate
* @ModifyDescription 描述修改内容
*/
public class MyUtil {
//facade的父类 类名
private static String facadeParent2 = "com.cmb.ccrm.customer.base.CcrmCustomerBaseFacade";
//dao的父类 类名
private static String daoParent2 = "com.cmb.ccrm.customer.base.CcrmCustomerBaseDao";
//4位项目编号
private static String projectCd = "MC01";
private static String facadeParent = "";
private static String daoParent = "";
public static void main(String[] args) throws IOException, XMLParserException {
facadeParent = facadeParent2.substring(facadeParent2.lastIndexOf(".") + 1);
daoParent = daoParent2.substring(daoParent2.lastIndexOf(".") + 1);
MyUtil util = new MyUtil();
//model 所在的包名 去掉一个就是 facade service dao 所在的包
List<String> modelPaths = getModelPath();
List<MyModel> models = getMyModels(modelPaths);
util.getJavaBatch(models);
}
/**
* @return java.util.List<java.lang.String>
* @throws
* @description 获取model的路径
* @params []
* @author CS03982
* @CreateDate 2018/11/9 8:04
* @Modifier
* @ModifyDate
* @ModifyDescription 描述修改内容
*/
static List<String> getModelPath() throws IOException, XMLParserException {
String resource = Thread.currentThread().getContextClassLoader().getResource("").toString();
String truePath = resource.substring(resource.indexOf("/") + 1, resource.indexOf("target"));
ConfigurationParser cp = new ConfigurationParser(null);
InputStream fileInputStream = new FileInputStream(truePath + "\\src\\main\\resources\\generatorConfig.xml");
Configuration config = cp.parseConfiguration(fileInputStream);
List<Context> contexts = config.getContexts();
List<String> modelPaths = new ArrayList<>();
for (Context context : contexts) {
String targetPackage = context.getJavaModelGeneratorConfiguration().getTargetPackage();
//获得model所在的包
modelPaths.add(targetPackage);
}
return modelPaths;
}
private static List<MyModel> getModels(String basePath, String facadeParent, String daoParent, List<String> modelNames) {
List<MyModel> modelList = new ArrayList();
for (String modelName : modelNames) {
MyModel myModel = new MyModel(basePath + "." + getStringFirst2lower(modelName), projectCd + modelName + facadePost, facadeParent, daoParent, modelName);
modelList.add(myModel);
}
return modelList;
}
private static List<MyModel> getMyModels(List<String> modelPaths) {
List<MyModel> models = new ArrayList();
for (String modelPath : modelPaths) {
String basePath = modelPath.substring(0, modelPath.lastIndexOf("."));
String path = getPath(modelPath, "");
File direct = new File(path);
File[] files = direct.listFiles();
for (File file : files) {
if (file.isFile()) {
String name = file.getName();
String modelName = name.substring(0, name.lastIndexOf("."));
MyModel myModel = new MyModel(basePath, projectCd + "Get" + modelName + facadePost, facadeParent, daoParent, modelName);
models.add(myModel);
}
}
}
return models;
}
void getJavaBatch(List<MyModel> myModelList) {
for (MyModel myModel : myModelList) {
getJava(myModel);
}
}
private static String filePath = "src/main/java/";
private static String postFile = ".java";
private static String facadePost = "Facade";
public void getJava(MyModel myModel) {
try {
String packagePath = myModel.getPackagePath();//"com.cmb.ccrm.customer.testD";//所在包
String className = myModel.getClassName();//"MY01UserFacade";//facade Bean Name 要求长度大于11,前4位为工程编码,后6位为Facade,中间位数驼峰命名
String fileModelName = myModel.getFileModelName();//"User";//模型
String serviceName = fileModelName + "Service";
String daoName = fileModelName + "Dao";
String daoImplName = fileModelName + "DaoImpl";
//获得路径
String facadeTruePath = getPath(packagePath, ".facade");
String serviceTruePath = getPath(packagePath, ".service");
String daoTruePath = getPath(packagePath, ".dao");
String modelTruePath = getPath(packagePath, ".model");
//创建文件
File facadeFile = createFile(facadeTruePath, className.substring(4, className.length()));
File serviceFile = createFile(serviceTruePath, serviceName);
File daoFile = createFile(daoTruePath, daoName);
File daoImplFile = createFile(daoTruePath + "/impl", daoImplName);
createFile(modelTruePath, null);
//获得数据
String facadeData = getFacadeData(myModel);
String serviceData = getServiceData(myModel);
String daoData = getDaoData(myModel);
String daoImplData = getDaoImplData(myModel);
//facade
writeData(facadeFile, facadeData);
//service
writeData(serviceFile, serviceData);
//dao
writeData(daoFile, daoData);
//daoImpl
writeData(daoImplFile, daoImplData);
System.out.println("Done:" + myModel.getFileModelName());
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
private String getDaoImplData(MyModel myModel) {
String packagePath = myModel.getPackagePath();
String daoName = myModel.getFileModelName() + "Dao";
String daoParentClass = myModel.getDaoParentClass();// "CcrmCustomerBaseDao";//dao父类
String daoImplName = myModel.getFileModelName() + "DaoImpl";
StringBuffer data = new StringBuffer();
data.append("package " + packagePath + ".dao.impl" + ";\n");
data.append("import " + packagePath + ".dao." + daoName + ";\n" +
"import org.springframework.stereotype.Repository;\n"+
"import "+daoParent2+";\n");
data.append("\n");
data.append("@Repository\n" +
"public class " + daoImplName + " extends " + daoParentClass + " implements " + daoName + " {\n" +
"\n" +
" private static final String BASE_PATH = \"" + packagePath + ".dao.\";\n" +
"\n" +
" private static final String METHODNAME = BASE_PATH + \"methodName\";\n" +
" //todo\n" +
" @Override\n" +
" public Object methodName(Object object) {\n" +
" return getPersistenceFactory().selectOne(getWriteDataSource(), METHODNAME, object);\n" +
" }\n" +
"\n" +
"}\n");
return data.toString();
}
private void writeData(File facadeFile, String facadeData) throws IOException {
FileWriter fileWritter = new FileWriter(facadeFile, false);
fileWritter.write(facadeData);
fileWritter.close();
}
private String getDaoData(MyModel myModel) {
String packagePath = myModel.getPackagePath();
String daoName = myModel.getFileModelName() + "Dao";
StringBuffer data = new StringBuffer();
data.append("package " + packagePath + ".dao;\n");
data.append("\n");
data.append("\n");
data.append("public interface " + daoName + " {\n" +
"\n" +
" Object methodName(Object object);\n" +
"\n" +
"}");
return data.toString();
}
private File createFile(String truePath, String fileName) throws IOException {
File file1 = new File(truePath);
if (!file1.exists()) {
file1.mkdirs();
}
if (fileName == null || StringUtil.isEmpty(fileName)) {
return null;
}
File file = new File(truePath, fileName + postFile);
if (!file.exists()) {
file.createNewFile();
}
return file;
}
private String getServiceData(MyModel myModel) {
String packagePath = myModel.getPackagePath();
String serviceName = myModel.getFileModelName() + "Service";
String daoName = myModel.getFileModelName() + "Dao";
StringBuffer data = new StringBuffer();
data.append("package " + packagePath + ".service;\n");
data.append("\n");
data.append("\n");
data.append("import org.springframework.beans.factory.annotation.Autowired;\n" +
"import org.springframework.stereotype.Service;\n");
data.append("import " + packagePath + ".dao." + daoName + ";\n");
data.append("\n");
data.append("@Service\n" +
"public class " + serviceName + " {\n" +
"\n" +
" @Autowired\n" +
" private " + daoName + " " + getStringFirst2lower(daoName) + ";\n" +
"\n" +
" //todo \n" +
"\n" +
"}");
return data.toString();
}
private static String getPath(String packagePath, String name) {
String resource = Thread.currentThread().getContextClassLoader().getResource("").toString();
String truePath = resource.substring(resource.indexOf("/") + 1, resource.indexOf("target"));
packagePath += name;
String path = packagePath.replaceAll("\\.", "/");
return truePath + filePath + path;
}
private String getFacadeData(MyModel myModel) throws Exception {
String className = myModel.getClassName();
String packagePath = myModel.getPackagePath();
String serviceName = myModel.getFileModelName() + "Service";
String facadeParentClass = myModel.getFacadeParentClass();
if (className.length() < 11) {
throw new Exception(className + "长度需要大于10");
}
String xz = className.substring(4, className.length() - 6).toUpperCase();
StringBuffer data = new StringBuffer();
data.append("package " + packagePath + ".facade;\n");
data.append("\n");
data.append("\n");
data.append("import com.cmb.framework.exception.FrameworkException;\n" +
"import org.slf4j.Logger;\n" +
"import org.slf4j.LoggerFactory;\n" +
"import org.springframework.beans.factory.annotation.Autowired;\n" +
"import org.springframework.stereotype.Component;\n" +
"\n" +
"import java.util.HashMap;\n" +
"import java.util.List;\n" +
"import java.util.Map;\n");
data.append("import com.cmb.ccrm.customer.base.ErrorCode;\n" +
"import com.cmb.ccrm.tool.base.util.MsgConstants;\n" +
"import " + packagePath + ".service." + serviceName + ";\n" +
"import com.cmb.framework.core.PRCModel;\n"+
"import "+facadeParent2+";\n");
data.append("\n");
data.append("@Component(\"" + projectCd + xz + "\")\n" +
"public class " + className.substring(4, className.length()) + " extends " + facadeParentClass + " {\n" +
" private static Logger logger = LoggerFactory.getLogger(" + className.substring(4, className.length()) + ".class);\n" +
"\n" +
" private static final String " + xz + "X1 = \"" + xz + "X1\";\n" +
" private static final String " + xz + "Z1 = \"" + xz + "Z1\";\n" +
"\n" +
" @Autowired\n" +
" private " + serviceName + " " + getStringFirst2lower(serviceName) + ";\n" +
"\n" +
" @Override\n" +
" public PRCModel doBusiness(PRCModel prcModel) throws FrameworkException {\n" +
" try {\n" +
"\n" +
" Map<String, Object> paramMap = new HashMap<>();\n" +
" List<Map<String, Object>> paramsList = prcModel.getInputInterface(" + xz + "X1);\n" +
" paramMap.putAll(paramsList.get(0));\n" +
"\n" +
"\n" +
" //todo \n" +
"\n" +
" Map<String, Object> result = new HashMap<>();\n" +
" //todo \n" +
"\n" +
" prcModel.createOuputInterface(" + xz + "Z1);\n" +
" prcModel.putOutputInterfaceData(" + xz + "Z1, result);\n" +
"\n" +
" prcModel.setRtncod(MsgConstants.SUC0000);\n" +
" } catch (Exception e) {\n" +
" logger.error(\"出错信息: \", e);\n" +
" prcModel.setErrmsg(\"系统操作异常,请稍后再试!\");\n" +
" prcModel.setRtncod(MsgConstants.ERRMSG);\n" +
" throw new FrameworkException(ErrorCode.ERROR_CODE_0000001, e);\n" +
" }\n" +
" return prcModel;\n" +
" }\n" +
"}");
return data.toString();
}
static String getStringFirst2lower(String name) {
char[] chars = name.toCharArray();
String first = (chars[0] + "").toLowerCase();
chars[0] = first.toCharArray()[0];
return String.valueOf(chars);
}
}