美文网首页程序员的日常JavaAndroid知识
在java web项目中编写自己的代码生成器

在java web项目中编写自己的代码生成器

作者: 三生浮屠 | 来源:发表于2016-09-26 16:48 被阅读1424次

    一直从事web开发工作,最近发现一直在写几乎重复的代码,于是就想着给项目中添加一个代码生成器的功能。大体思路如下:(数据+模板)


    思路图

    这里我使用的模块引擎为:beetl(国人开发的,官网有详尽的文档)。
    下面我以生成bean java类为例的实现:

    • bean类文件的模板如下:
    package #{bean.beanPackage};
    /**
     * @author #{bean.beanAuthor} #{bean.beanCreateTime}
     *
     */
    public class #{bean.beanClassName} extends AbsBean{
    
        <#
        for(param in bean.properties){
        #>
        private #{param.type} #{param.name};//#{param.remark}
        <#}#>
        
        <#
        for(param in bean.properties){
            var firstChar = strutil.subStringTo(param.name,0,1);
            var firstChar_upper =  strutil.toUpperCase(firstChar);
            var paramName = strutil.replace (param.name,firstChar,firstChar_upper);
        #>
        public String get#{paramName}() {
            return #{param.name};
        }
        public void set#{paramName}(String #{param.name}) {
            this.#{param.name} = #{param.name};
        }
        
        <#}#>
    }
    

    java 代码如下:

    public class MyGenerator {
        public static void main(String[] args) throws IOException {
            String root = System.getProperty("user.dir")+File.separator+"template";//模板路径
            FileResourceLoader resourceLoader = new FileResourceLoader(root,"utf-8");
            Configuration cfg = Configuration.defaultConfiguration();
            GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
            MyGenerator t = new MyGenerator();
            t.getCodeForBean(gt, "/bean.template");//
        }
        /**
         * 
         * @param gt
         * @param FilePath 模板路径
         */
        
        private void getCodeForBean(GroupTemplate gt,String FilePath){
            Template t = gt.getTemplate(FilePath);
            BeanOfBean bean = new BeanOfBean(); 
            bean.setBeanAuthor("Tom");
            bean.setBeanClassName("TestBean");
            bean.setBeanCreateTime(new Date().toString());
            bean.setBeanPackage("com.space.test.bean");
            
            List<ColumnBean> list = new ArrayList<ColumnBean>();
            ColumnBean b = new ColumnBean();
            b.setName("id");//字段名
            b.setRemark("id");//字段备注
            b.setType("String");//字段类型
            ColumnBean b2 = new ColumnBean();
            b2.setName("name");//字段名
            b2.setRemark("名称");//字段备注
            b2.setType("String");//字段类型
            list.add(b);
            list.add(b2);
            bean.setProperties(list);
            
            t.binding("bean",bean);
            String str = t.render();
            System.out.println(str);//打印出生成的代码
        }   
    }
    

    运行后控制台输出的代码如下:

    package com.space.test.bean;
    /**
     * @author Tom Mon Sep 26 16:36:59 CST 2016
     *
     */
    public class TestBean extends AbsBean{
    
        private String id;//id
        private String name;//名称
        
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
    }
    
    

    总结:一个代码生成器其实就是:数据被填充到模板中,而填充使用模板引擎(或者自己用代码实现) ,这些模板引擎各自有自己的语法,当然他们的效率以及优势各有不同。

    相关文章

      网友评论

      本文标题:在java web项目中编写自己的代码生成器

      本文链接:https://www.haomeiwen.com/subject/fcyqyttx.html