自动创建包和类

我日常的主要工作是为移动端提供接口,我们的公司框架定义了一套创建一个接口需要的类;每个模块都要定义这些类,包括数据库查询的Dao层,调用Dao保证数据库查询的事务一致的Service层,处理业务逻辑的Blh层,和处理请求的Resource层;起初我创建这些类的方法是Copy已经存在的同一层次的类,创建包、Copy、修改类内代码使符合当下路径要求;但是,当我重复来太多次之后,觉得这件事情,不应该再人肉Ctrl + C、Ctrl + V了,于是有了下面的代码;下面的代码做两件事:1.在指定目录层次下创建Package;2.在Package下创建符合该层次下的类的基础代码。详情请看示例代码:

package com.dhcc.mhealth.common.util.file.generate.Interface;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Description 创建新建一个接口需要的package和class
 * @Author .Mark
 * @Date 2019年1月12日
 * @Note 包访问路径常量需要替换成自己本地路径
 * @Note 包名替换为自己想要建的包的名字或者已存在的包名
 * @Note 类名替换为自己想要建的类的名字
 * @Note 作者替换自己名
 */
public class GenerateInterface {    
    /**
     * Dao层包访问路径
     */
    private static String DAO_DIR = "D:\\development\\workspace\\jklApi\\src\\main\\java\\com\\dhcc\\mhealth\\dao\\";
    
    /**
     * Service层包访问路径
     */
    private static String SERVICE_DIR = "D:\\development\\workspace\\jklApi\\src\\main\\java\\com\\dhcc\\mhealth\\service\\";
    
    /**
     * Blh层包访问路径
     */
    private static String BLH_DIR = "D:\\development\\workspace\\jklApi\\src\\main\\java\\com\\dhcc\\mhealth\\blh\\";
    
    /**
     * Resource层包访问路径
     */
    private static String RESOURCE_DIR = "D:\\development\\workspace\\jklApi\\src\\main\\java\\com\\dhcc\\mhealth\\web\\jklapi\\";
    
    /**
     * 类所在包的包名(这个包可以是要去新建的,也可以是已存在的)
     */
    private static String PACKAGE_NAME = "tmp\\tmp2";
    
    /**
     * 类名
     */
    private static String CLASS_NAME = "CreateAClass";
    
    /**
     * 类注释
     */
    private static String CLASS_ANNOTATION = "测试相关";
    
    /**
     * 作者
     */
    private static String AUTHOR = ".Mark";
    
    public static void main(String[] args) {
        // 1.创建新建一个Dao需要的Package和Class
        createDao();
        
        // 2.创建新建一个Service需要的Package和Interface
        createService();
        
        // 3.创建新建一个ServiceImpl需要的Package和Class
        createServiceImpl();
        
        // 4.创建新建一个Blh需要的Package和Class
        createBlh();
        
        // 5.创建新建一个Resource需要的Package和Class
        createResource();
    }
    
    /**
     * @Description 生成注释
     * @Author .Mark
     * @Date 2019年1月13日
     */
    private static StringBuffer generateAnnotation(StringBuffer code) {
        code.append("/**").append("\r\n");
        code.append(" * @Description ").append(CLASS_ANNOTATION).append("\r\n");
        code.append(" * @Author ").append(AUTHOR).append("\r\n");
        code.append(" * @Date ").append(new SimpleDateFormat("yyyy年MM月dd日").format(new Date())).append("\r\n");
        code.append(" */").append("\r\n");
        return code;
    }
    
    /**
     * @Description 代码输出为文件
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static void outputAsAFile(String code, String outputPath) {
        try {
            FileWriter fileWriter = new FileWriter(outputPath);
            PrintWriter printWriter = new PrintWriter(fileWriter);
            printWriter.println(code);
            printWriter.flush();
            printWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * @Description 首字母小写
     * @Author .Mark
     * @Date 2019年1月13日
     */
    private static String makeTheFirstLetterLowercase(String word) {
        // 1.限制入参
        if (word == null || "".equals(word)) {
            return word;
        }
        
        // 2.首字母小写
        String firstLetter = String.valueOf(word.charAt(0));
        return word.replaceFirst(firstLetter, firstLetter.toLowerCase());
    }
    
    /**
     * @Description 创建新建一个Dao需要的Package和Class
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static void createDao() {
        // 1.创建目录
        String daoPath = DAO_DIR + PACKAGE_NAME;
        File file2CreatePackage = new File(daoPath);
        file2CreatePackage.mkdirs();
        System.out.println("创建Dao层Package完毕");
        
        // 2.生成dao类内代码
        String daoCode = generateDaoCode();
        
        // 3.代码输出为文件
        String outputPath = DAO_DIR + PACKAGE_NAME + "\\" + CLASS_NAME + "Dao.java";
        outputAsAFile(daoCode, outputPath);
        System.out.println("创建Dao完毕");
    }
    
    /**
     * @Description 生成Dao类内代码
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static String generateDaoCode() {
        // 1.
        StringBuffer daoCode = new StringBuffer();
        
        // 2.Package声明
        daoCode.append("package ").append("com.dhcc.mhealth.dao.").append(PACKAGE_NAME.replace("\\", ".")).append(";\r\n").append("\r\n");
        
        // 3.Import
        daoCode.append("import java.io.Serializable;").append("\r\n").append("\r\n");
        daoCode.append("import javax.annotation.Resource;").append("\r\n").append("\r\n");
        daoCode.append("import org.springframework.jdbc.core.JdbcTemplate;").append("\r\n");
        daoCode.append("import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;").append("\r\n");
        daoCode.append("import org.springframework.stereotype.Repository;").append("\r\n").append("\r\n");
        daoCode.append("import com.dhcc.framework.hibernate.dao.HibernatePersistentObjectDAO;").append("\r\n").append("\r\n");
        
        // 4.类注释
        daoCode = generateAnnotation(daoCode);
        
        // 5.类主体
        daoCode.append("@Repository").append("\r\n");
        daoCode.append("public class ").append(CLASS_NAME).append("Dao extends HibernatePersistentObjectDAO<Serializable> {").append("\r\n").append("\r\n");
        daoCode.append("    @Resource").append("\r\n");
        daoCode.append("    private JdbcTemplate jdbcTemplate;").append("\r\n").append("\r\n");
        daoCode.append("    @Resource").append("\r\n");
        daoCode.append("    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;").append("\r\n").append("\r\n");
        daoCode.append("}");
        
        return daoCode.toString();
    }
    
    /**
     * @Description 创建新建一个Service需要的Package和Interface
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static void createService() {
        // 1.创建目录
        String servicePath = SERVICE_DIR + PACKAGE_NAME;
        File file2CreatePackage = new File(servicePath);
        file2CreatePackage.mkdirs();
        System.out.println("创建Service层Package完毕");
        
        // 2.生成service接口内代码
        String serviceCode = generateServiceCode();
        
        // 3.代码输出为文件
        String outputPath = SERVICE_DIR + PACKAGE_NAME + "\\" + CLASS_NAME + "Service.java";
        outputAsAFile(serviceCode, outputPath);
        System.out.println("创建Service完毕");
    }
    
    /**
     * @Description 生成Service接口内代码
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static String generateServiceCode() {
        // 1.
        StringBuffer serviceCode = new StringBuffer();
        
        // 2.Package声明
        serviceCode.append("package ").append("com.dhcc.mhealth.service.").append(PACKAGE_NAME.replace("\\", ".")).append(";\r\n").append("\r\n");
        
        // 3.接口注释
        serviceCode = generateAnnotation(serviceCode);
        
        // 4.类主体
        serviceCode.append("public interface ").append(CLASS_NAME).append("Service {").append("\r\n").append("\r\n");
        serviceCode.append("}");
        
        return serviceCode.toString();
    }
    
    /**
     * @Description 创建新建一个ServiceImpl需要的Package和Class
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static void createServiceImpl() {
        // 1.创建目录
        String serviceImplPath = SERVICE_DIR + PACKAGE_NAME + "\\impl";
        File file2CreatePackage = new File(serviceImplPath);
        file2CreatePackage.mkdirs();
        System.out.println("创建Service层Package下的Impl包完毕");
        
        // 2.生成ServiceImpl类内代码
        String serviceImplCode = generateServiceImplCode();
        
        // 3.代码输出为文件
        String outputPath = SERVICE_DIR + PACKAGE_NAME + "\\impl\\" + CLASS_NAME + "ServiceImpl.java";
        outputAsAFile(serviceImplCode, outputPath);
        System.out.println("创建ServiceImpl完毕");
    }
    
    /**
     * @Description 生成serviceImpl类内代码
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static String generateServiceImplCode() {
        // 1.
        StringBuffer serviceImplCode = new StringBuffer();
        
        // 2.Package声明
        serviceImplCode.append("package ").append("com.dhcc.mhealth.service.").append(PACKAGE_NAME.replace("\\", ".")).append(".impl").append(";\r\n").append("\r\n");
        
        // 3.Import
        serviceImplCode.append("import javax.annotation.Resource;").append("\r\n").append("\r\n");
        serviceImplCode.append("import org.springframework.stereotype.Service;").append("\r\n").append("\r\n");
        serviceImplCode.append("import com.dhcc.mhealth.dao.").append(PACKAGE_NAME.replace("\\", ".")).append(".").append(CLASS_NAME).append("Dao;").append("\r\n");
        serviceImplCode.append("import com.dhcc.mhealth.service.").append(PACKAGE_NAME.replace("\\", ".")).append(".").append(CLASS_NAME).append("Service;").append("\r\n").append("\r\n");
        
        // 4.类注释m
        serviceImplCode = generateAnnotation(serviceImplCode);
        
        // 5.类主体
        serviceImplCode.append("@Service(\"").append(makeTheFirstLetterLowercase(CLASS_NAME)).append("Service\")").append("\r\n");
        serviceImplCode.append("public class ").append(CLASS_NAME).append("ServiceImpl implements ").append(CLASS_NAME).append("Service {").append("\r\n").append("\r\n");
        serviceImplCode.append("    @Resource").append("\r\n");
        serviceImplCode.append("    private ").append(CLASS_NAME).append("Dao ").append(makeTheFirstLetterLowercase(CLASS_NAME)).append("Dao;").append("\r\n").append("\r\n");
        serviceImplCode.append("}");
        
        return serviceImplCode.toString();
    }
    
    /**
     * @Description 创建新建一个Blh需要的Package和Class
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static void createBlh() {
        // 1.创建目录
        String blhPath = BLH_DIR + PACKAGE_NAME;
        File file2CreatePackage = new File(blhPath);
        file2CreatePackage.mkdirs();
        System.out.println("创建Blh层Package完毕");
        
        // 2.生成Blh类内代码
        String blhCode = generateBlhCode();
        
        // 3.代码输出为文件
        String outputPath = BLH_DIR + PACKAGE_NAME + "\\" + CLASS_NAME + "Blh.java";
        outputAsAFile(blhCode, outputPath);
        System.out.println("创建Blh完毕");
    }
    
    /**
     * @Description 生成Blh类内代码
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static String generateBlhCode() {
        // 1.
        StringBuffer blhCode = new StringBuffer();
        
        // 2.Package声明
        blhCode.append("package ").append("com.dhcc.mhealth.blh.").append(PACKAGE_NAME.replace("\\", ".")).append(";\r\n").append("\r\n");
        
        // 3.Import
        blhCode.append("import javax.annotation.Resource;").append("\r\n").append("\r\n");
        blhCode.append("import org.springframework.stereotype.Component;").append("\r\n").append("\r\n");
        blhCode.append("import com.dhcc.framework.app.blh.BaseAbstractBlh;").append("\r\n").append("\r\n");
        blhCode.append("import com.dhcc.mhealth.dto.BaseDhccDto;").append("\r\n");
        blhCode.append("import com.dhcc.mhealth.service.").append(PACKAGE_NAME.replace("\\", ".")).append(".").append(CLASS_NAME).append("Service;").append("\r\n").append("\r\n");
        
        // 4.类注释
        blhCode = generateAnnotation(blhCode);
        
        // 5.类主体
        blhCode.append("@Component").append("\r\n");
        blhCode.append("public class ").append(CLASS_NAME).append("Blh extends BaseAbstractBlh<BaseDhccDto> {").append("\r\n").append("\r\n");
        blhCode.append("    @Resource").append("\r\n");
        blhCode.append("    private ").append(CLASS_NAME).append("Service ").append(makeTheFirstLetterLowercase(CLASS_NAME)).append("Service;").append("\r\n").append("\r\n");
        blhCode.append("}");
        
        return blhCode.toString();
    }

    /**
     * @Description 创建新建一个Resource需要的Package和Class
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static void createResource() {
        // 1.创建目录
        String resourcePath = RESOURCE_DIR + PACKAGE_NAME;
        File file2CreatePackage = new File(resourcePath);
        file2CreatePackage.mkdirs();
        System.out.println("创建Resource层Package完毕");
        
        // 2.生成Resource类内代码
        String resourceCode = generateResourceCode();
        
        // 3.代码输出为文件
        String outputPath = RESOURCE_DIR  + PACKAGE_NAME + "\\" + CLASS_NAME + "Resource.java";
        outputAsAFile(resourceCode, outputPath);
        System.out.println("创建Resource完毕");
    }
    
    /**
     * @Description 生成Resource类内代码
     * @Author .Mark
     * @Date 2019年1月12日
     */
    private static String generateResourceCode() {
        // 1.
        StringBuffer resourceCode = new StringBuffer();
        
        // 2.Package声明
        resourceCode.append("package ").append("com.dhcc.mhealth.web.jklapi.").append(PACKAGE_NAME.replace("\\", ".")).append(";\r\n").append("\r\n");
        
        // 3.Import
        resourceCode.append("import javax.annotation.Resource;").append("\r\n").append("\r\n");
        resourceCode.append("import javax.ws.rs.Path;").append("\r\n").append("\r\n");
        resourceCode.append("import org.apache.commons.logging.Log;").append("\r\n");
        resourceCode.append("import org.apache.commons.logging.LogFactory;").append("\r\n").append("\r\n");
        resourceCode.append("import org.springframework.stereotype.Component;").append("\r\n").append("\r\n");
        resourceCode.append("import com.dhcc.mhealth.blh.").append(PACKAGE_NAME.replace("\\", ".")).append(".").append(CLASS_NAME).append("Blh;").append("\r\n").append("\r\n");
        
        // 4.类注释
        resourceCode = generateAnnotation(resourceCode);
        
        // 5.类主体
        resourceCode.append("@Component").append("\r\n");
        resourceCode.append("@Path(\"/").append(makeTheFirstLetterLowercase(CLASS_NAME)).append("\")").append("\r\n");
        resourceCode.append("public class ").append(CLASS_NAME).append("Resource {").append("\r\n").append("\r\n");
        resourceCode.append("    private static Log logger = LogFactory.getLog(").append(CLASS_NAME).append("Resource.class);").append("\r\n").append("\r\n");
        resourceCode.append("    @Resource").append("\r\n");
        resourceCode.append("    private ").append(CLASS_NAME).append("Blh ").append(makeTheFirstLetterLowercase(CLASS_NAME)).append("Blh;").append("\r\n").append("\r\n");
        resourceCode.append("}");
        
        return resourceCode.toString();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值