解放你的双手,延续你的生命

工作中无可避免的有很多重复的增删改查,枯燥无味,作为一个牛逼的开发人员,重复的事情要交给程序去干

思考

可以使用模板方式,把重复的任务做成模板,批量生成,freemark大家都比较熟悉就它了, 一直比较喜欢intellij idea,就来弄个intellij idea的插件吧。想想 像生成get set 方法一样快速生成还是蛮激动的。

资料

开始

比较简单了解插件的开发步骤很快就差不多了, intellij自己抽象了一层类似文件,类的东西

  • PsiFile 获取当前文件相关信息
  • PsiClass 把当前元素抽象成类,可以获取相关类属性

获取到这些,剩下的就很简单了,设置需要的模板参数,交给freemark用指定模板生成文件就好了

这里获取配置文件需要注意一下,因为插件开发完成 是要打成zip的包来发布安装的,里面是打成了jar,可能你调试时没问题,但实际使用可能会获取不到正确的路径, 大家应该知道获取jar包中的配置文件是比较麻烦的事情可以参考 这片文章 而这里还有点麻烦,freemark 设置模板文件目录只支持File(没找到支持流的方式)

            Configuration cfg = new Configuration();
            cfg.setDirectoryForTemplateLoading(file);

所以

        InputStream is=this.getClass().getResourceAsStream("/resource/res.txt");

这种方法获取配置也不合适,最后只能从总工程目录扫描约定的文件夹名称来解决了。

fast-create

好了,源码比较少在这里 https://github.com/waykingjava/fast-create.git

基本构成

依赖freeMark模板引擎生成对应文件

使用说明


  • 在工程下新建fast-template文件夹

  • 创建工程模板类文件

    • 模板文件为freeMark模板语法
    • 扩展名随意,但生成的文件为.java文件,如果有需要你可以自己修改源码
  • 打包安装插件
  • alt+insert 快捷键使用
    • 这里生成的为对应.java文件,文件名称为{当前类名称}+{模板名称}.java

      已经内置可以在freemark中使用的变量

  • package 包路径,当前类所在包路径
  • user 当前系统用户名称
  • modelName 当前类名称
  • fields 当前类字段集合
    • name 字段名称
    • type 字段类型
  • className 当前生成模板的类名称

示例

  • 模板(xxxDto模板)
package ${package};

import java.io.Serializable;
import java.util.Date;
/**
* Created by ${user} on ${.now}
*/
public class ${modelName}DTO implements Serializable {
<#list fields as attr>
    private ${attr.type} ${attr.name};
</#list>

<#list fields as attr>
    /**
     * set${attr.name?cap_first}
     */
    public void set${attr.name?cap_first}(${attr.type} ${attr.name}){
        this.${attr.name}=${attr.name};
    }
    /**
     * get${attr.name?cap_first}
     */
    public ${attr.type} get${attr.name?cap_first}(){
         return ${attr.name};
    }
</#list>
}

在User上执行

public class User {
    private String userName;
    private String userPwd;
}

生成后的类

public class UserDTO implements Serializable {
    private String userName;
    private String userPwd;

    /**
     * setUserName
     */
    public void setUserName(String userName){
        this.userName=userName;
    }
    /**
     * getUserName
     */
    public String getUserName(){
         return userName;
    }
    /**
     * setUserPwd
     */
    public void setUserPwd(String userPwd){
        this.userPwd=userPwd;
    }
    /**
     * getUserPwd
     */
    public String getUserPwd(){
         return userPwd;
    }
}

应用场景

现在基本是对某meta快速生成增删改查。

效果

我们现在分的层次 Controller->manager->service->dao中间需要有对应的vo、bo、dto、meta,对应的各个o的转换,感受下如果我现在要简单的加张表,我需要做些什么,之前都是复制粘贴过来,全局根据meta类名称更改名称,但是比较容易出错,而且经常要睡着。

现在做了下模板,以后只要数据建模完成,fast-create一下什么都有啦,再根据自己的业务对方法增加逻辑即可

不足

  • 模板现在支持的内置对象还比较少
  • 生成的.java文件全都保持和当前操作的类在统一包,需要自己把对应文件拖到对应的包路径,
  • 可能是itellij idea的刷新机制影响,提示创建完成后,对应文件夹要多刷新几次,才能看到新创建的文件。

好了,最后,虽然还有很多不足,但是起码已经帮我做了很多事情,只要痛苦一次把模板创建完成,后面这些重复的工作就可以一键搞定啦,这样才有更多的时间悄悄的搞一些不为人知的事情。 如果你有需要可以自己修改源码创作自己的插件,如果只想体验使用一下可以这里下载

下载后安装

如果你有好的建议,欢迎反馈。

本文来自网易实践者社区,经作者张昌路授权发布。