beetl根据模板生成代码文件

转载自: http://www.513school.com/bbs/admin/1/111643.html

生成代码在开发过程可以节约开发时间,这里介绍beetl生成代码方式

在此就不多说beetl的好处,直接上代码

首先pom.xml引入beetle包如下:

        <dependency>

            <groupId>com.ibeetl</groupId>

            <artifactId>beetl</artifactId>

            <version>2.9.10</version>

        </dependency>

主类

    /**

     * 运行该主函数即可生成代码

     *

     * @param args

     * @throws IOException

     */

    public static void main(String[] args) throws IOException {

       // 模板路径

        ClasspathResourceLoader resourceLoader = new ClasspathResourceLoader("/codetemplate/background/");

        Configuration cfg = Configuration.defaultConfiguration();

        GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);

        // 生成代码

        //根据类名删除生成的代码

     generateCode(gt, TemplateType.BaseController, "CodeTemplateSubEntity", "代码生成模板子表", "liusheng", "bs.code");

    }

    public enum TemplateType{

     BaseController("BaseEntity", "BaseController", "BaseServiceImpl", "BaseRepository"),

     TreeController("TreeEntity", "TreeController", "TreeServiceImpl", "BaseRepository"),

     SubController("SubEntity", "BaseController", "BaseServiceImpl", "SubRepository"),

     SuperController("SuperEntity", "SuperController", "SuperServiceImpl", "BaseRepository"),

     Workflow("AuditEntity", "BaseProcessController", "BaseWorkflowService", "BaseRepository");

        /**

         * 继承的entity父类

         */

        private String extendsEntity;

        /**

         * 继承的controller父类

         */

        private String extendsController;

        /**

         * 继承的service父类

         */

        private String extendsServiceImpl;

        /**

         * 继承的dao父类

         */

        private String extendsRepository;

        private Class<?> subEntity;

        private Class<?> subDao;

  private TemplateType(String extendsEntity, String extendsController, String extendsServiceImpl, String extendsRepository) {

   this.extendsEntity = extendsEntity;

   this.extendsController = extendsController;

   this.extendsServiceImpl = extendsServiceImpl;

   this.extendsRepository = extendsRepository;

  }

  public String getExtendsController() {

   return extendsController;

  }

  public String getExtendsServiceImpl() {

   return extendsServiceImpl;

  }

  public String getExtendsEntity() {

   return extendsEntity;

  }

  public String getExtendsRepository() {

   return extendsRepository;

  }

  public Class<?> getSubEntity() {

   return subEntity;

  }

  public void setSubEntity(Class<?> subEntity) {

   this.subEntity = subEntity;

  }

  public void setSubDao(Class<?> subDao) {

   this.subDao = subDao;

  }

  public Class<?> getSubDao() {

   return subDao;

  }

    }

    /**

     * 生成代码

     *

     * @param gt

     * @param author

     * @param description

     * @param className

     * @throws IOException

     */

    private static void generateCode(GroupTemplate gt, TemplateType templateType, String className, String description,

      String author, String modules) throws IOException {

        Template entityTemplate = gt.getTemplate("entity.btl");

        Template daoTemplate = gt.getTemplate("dao.btl");

        Template serviceTemplate = gt.getTemplate("service.btl");

        Template controllerTemplate = gt.getTemplate("controller.btl");

        String entityPackage = packages + "domain" +

        modules.substring(modules.lastIndexOf("."), modules.length());// + ".entity";

        String daoPackage = packages + modules;// + ".mapper";

        String servicePackage = packages + modules;// + ".service";

        String serviceImplPackage = packages + modules;// + ".serviceimpl";

        String controllerPackage = packages + modules;// + ".controller";

        YyCodeEntity entity = new YyCodeEntity();

        entity.setEntityPackage(entityPackage);

        entity.setDaoPackage(daoPackage);

        entity.setServicePackage(servicePackage);

        entity.setServiceImplPackage(serviceImplPackage);

        entity.setControllerPackage(controllerPackage);

        entity.setAuthor(author);

        entity.setClassName(className);

        entity.setTableName(tablePre + camel2Underline(className).replace("_entity", ""));

        entity.setClassFileName(replaceEntityName(className));

        entity.setClassNameLowerCase(firstCharChange(replaceEntityName(className), false));

        entity.setDescription(description);

        entity.setPrimaryKeyType(primaryKeyType);

        entity.setExtendsEntity(templateType.getExtendsEntity());

        entity.setExtendsController(templateType.getExtendsController());

        entity.setExtendsServiceImpl(templateType.getExtendsServiceImpl());

        entity.setExtendsRepository(templateType.getExtendsRepository());

        if(templateType.equals(TemplateType.SuperController)){

         entity.setSubEntity(templateType.getSubEntity().getName());

// entity.setSubServcie(", " + templateType.getSubEntity().getName());

         entity.setSubDao(templateType.getSubDao().getName());

        }else{

         entity.setSubEntity("");

// entity.setSubServcie("");

         entity.setSubDao("");

        }

        OutputStream out = null;

        //生成实体类代码

        entityTemplate.binding("entity", entity);

        String entityResult = entityTemplate.render();

        System.out.println(entityResult);

        //创建文件

        String entityFileUrl = System.getProperty("user.dir") + "/src/main/java/" + dotToLine(entityPackage) + "/" + className + ".java";

        File entityFile = new File(entityFileUrl);

        File entityDir = entityFile.getParentFile();

        if (!entityDir.exists()) {

            entityDir.mkdirs();

        }

        if (!entityFile.exists()) {

            // 若文件存在则不重新生成

            entityFile.createNewFile();

            out = new FileOutputStream(entityFile);

            entityTemplate.renderTo(out);

        }

        //生成dao代码

        daoTemplate.binding("entity", entity);

        String daoResult = daoTemplate.render();

        System.out.println(daoResult);

        //创建文件

        String daoFileUrl = System.getProperty("user.dir") + "/src/main/java/" + dotToLine(daoPackage) + "/" + replaceEntityName(className) + "Dao.java";

        File daoFile = new File(daoFileUrl);

        File daoDir = daoFile.getParentFile();

        if (!daoDir.exists()) {

            daoDir.mkdirs();

        }

        if (!daoFile.exists()) {

            // 若文件存在则不重新生成

            daoFile.createNewFile();

            out = new FileOutputStream(daoFile);

            daoTemplate.renderTo(out);

        }

        //生成service代码

        serviceTemplate.binding("entity", entity);

        String serviceResult = serviceTemplate.render();

        System.out.println(serviceResult);

        //创建文件

        String serviceFileUrl = System.getProperty("user.dir") + "/src/main/java/" + dotToLine(servicePackage) + "/" + replaceEntityName(className) + "Service.java";

        File serviceFile = new File(serviceFileUrl);

        File serviceDir = serviceFile.getParentFile();

        if (!serviceDir.exists()) {

            serviceDir.mkdirs();

        }

        if (!serviceFile.exists()) {

            // 若文件存在则不重新生成

            serviceFile.createNewFile();

            out = new FileOutputStream(serviceFile);

            serviceTemplate.renderTo(out);

        }

        //生成controller代码

        controllerTemplate.binding("entity", entity);

        String controllerResult = controllerTemplate.render();

        System.out.println(controllerResult);

        //创建文件

        String controllerFileUrl = System.getProperty("user.dir") + "/src/main/java/" + dotToLine(controllerPackage) + "/" + replaceEntityName(className) + "Controller.java";

        File controllerFile = new File(controllerFileUrl);

        File controllerDir = controllerFile.getParentFile();

        if (!controllerDir.exists()) {

            controllerDir.mkdirs();

        }

        if (!controllerFile.exists()) {

            // 若文件存在则不重新生成

            controllerFile.createNewFile();

            out = new FileOutputStream(controllerFile);

            controllerTemplate.renderTo(out);

        }

        if (out != null) {

            out.close();

        }

        System.out.println("已完成!自行挪动代码即可");

    }

controller.btl

package ${entity.controllerPackage};

import ${entity.entityPackage}.${entity.className};

import ${entity.servicePackage}.${entity.ClassFileName}Service;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.yy.frame.controller.${entity.extendsController};

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.beans.factory.annotation.Autowired;

/**

 * @author ${entity.author}

 */

@RestController

@RequestMapping(value = "/${entity.classNameLowerCase}")

public class ${entity.ClassFileName}Controller extends ${entity.extendsController}<${entity.className}>{

 Logger logger = LoggerFactory.getLogger(${entity.ClassFileName}Controller.class);

 @SuppressWarnings("unused")

 @Autowired

    private ${entity.ClassFileName}Service ${entity.classNameLowerCase}Service;

}

service.btl

package ${entity.servicePackage};

import ${entity.entityPackage}.${entity.className};

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

import com.yy.frame.dao.BaseRepository;

<%if(entity.subEntity != ''){%>import com.yy.frame.dao.SubRepository;<%}%>

import com.yy.frame.service.${entity.extendsServiceImpl};

/**

 * ${entity.description} 业务层

 * @author ${entity.author}

 */

@Service

@Transactional(readOnly = true, rollbackFor = { Exception.class })

public class ${entity.ClassFileName}Service extends ${entity.extendsServiceImpl}<${entity.className}, String<%if(entity.subEntity != ''){%>, ${entity.subEntity}<%}%>> {

 static public Logger logger = LoggerFactory.getLogger(${entity.ClassFileName}Service.class);

 @Autowired

 private ${entity.ClassFileName}Dao dao;

 <%if(entity.subEntity != ''){%>

 @Autowired

 private ${entity.subDao} subDao;

 <%}%>

 @Override

 protected BaseRepository<${entity.className}, String> getDAO() {

  return dao;

 }

 <%if(entity.subEntity != ''){%>

 @Override

 protected SubRepository<${entity.subEntity}, String> getSubDAO() {

  return subDao;

 }

 <%}%>

}

dao.btl

package ${entity.daoPackage};

import com.yy.frame.dao.${entity.extendsRepository};

import ${entity.entityPackage}.${entity.className};

/**

 * ${entity.description} Dao层

 * @author ${entity.author}

 */

public interface ${entity.ClassFileName}Dao extends ${entity.extendsRepository}<${entity.className}, String> {

}

entity.btl

package ${entity.entityPackage};

import javax.persistence.Entity;

import javax.persistence.Table;

import com.yy.frame.entity.${entity.extendsEntity};

import com.yy.common.annotation.MetaData;

import com.yy.common.annotation.ObjectDate;

import org.hibernate.annotations.DynamicInsert;

import org.hibernate.annotations.DynamicUpdate;

/**

 * ${entity.description} Entity层

 * @author ${entity.author}

 */

@MetaData(value = "${entity.description}")

@ObjectDate(value = "${entity.description}")

@Entity

@Table(name = "${entity.tableName}")

@DynamicInsert

@DynamicUpdate

public class ${entity.className} extends ${entity.extendsEntity}<%if(entity.subEntity != ''){%><${entity.subEntity}><%}%> {

    private static final long serialVersionUID = 1L;

}

更多的beetl语法可以自己网上查询,这样就可以灵活的根据模板生成代码了


转载自: http://www.513school.com/bbs/admin/1/111643.html


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容