自动生成facade,service,dao 工具

本文介绍了用于自动生成facade、service和dao的工具,帮助开发者提高代码编写效率,简化项目结构搭建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动生成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);
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值