工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

栏目: Hibernate · 发布时间: 5年前

内容简介:不知道大家有没有这样的感觉,在平时开发中,经常有很多参考项目:个人博客:

前言

不知道大家有没有这样的感觉,在平时开发中,经常有很多 daoservice 类中存着很多重复的代码, Velocity 提供了模板生成工具,今天我教大家怎么和这些大量的重复代码说再见。

参考项目: https://github.com/bigbeef/cppba-codeTemplate

个人博客: http://www.zhangbox.cn

注意

大家可以写适合自己的模板,这里为了演示,就直接拿 cppba-web 的模板来示范,至于 velocity 的语法大家可以查看这篇文章:

工具集核心教程 | 第四篇: Velocity模板引擎入门到大神

maven配置

<!-- velocity -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity</artifactId>
    <version>1.7</version>
</dependency>

创建模板文件

首先看下目录结构:

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

这里演示我就只贴出 ServiceImplTemplate.java ,需要其他模板代码可以到我 github 里面下载

#set ($domain = $!domainName.substring(0,1).toLowerCase()+$!domainName.substring(1))
package $!{packageName}.service.impl;

import $!{packageName}.core.bean.PageEntity;
import $!{packageName}.dao.$!{domainName}Dao;
import $!{packageName}.dto.$!{domainName}Dto;
import $!{packageName}.dto.BaseDto;
import $!{packageName}.entity.$!{domainName};
import $!{packageName}.service.$!{domainName}Service;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 开发者
 * nickName:星缘
 * email:1342541819@qq.com
 * github:https://github.com/bigbeef
 * velocity模板生成 cppba-codeTemplate
 */
@Service
@Transactional
public class $!{domainName}ServiceImpl implements $!{domainName}Service{
    @Resource
    private $!{domainName}Dao $!{domain}Dao;

    @Override
    public void save($!{domainName} $!{domain}) {
        $!{domain}Dao.save($!{domain});
    }

    @Override
    public void delete($!{domainName} $!{domain}) {
        $!{domain}Dao.delete($!{domain});
    }

    @Override
    public void update($!{domainName} $!{domain}) {
        $!{domain}Dao.update($!{domain});
    }

    @Override
    public $!{domainName} findById(int id) {
        return ($!{domainName}) $!{domain}Dao.get($!{domainName}.class, id);
    }

    @Override
    public PageEntity<$!{domainName}> query(BaseDto baseDto) {
        String hql = " select distinct $!{domain} from $!{domainName} $!{domain} where 1=1 ";
        Map params = new HashMap<String,Object>();

        $!{domainName}Dto $!{domain}Dto = ($!{domainName}Dto)baseDto;
        $!{domainName} $!{domain} = $!{domain}Dto.get$!{domainName}();
        int page = $!{domain}Dto.getPage();
        int pageSize = $!{domain}Dto.getPageSize();

        List list = $!{domain}Dao.query(hql,params,page,pageSize);
        long count = $!{domain}Dao.count(hql,params);
        PageEntity<$!{domainName}> pe = new PageEntity<$!{domainName}>();
        pe.setCount(count);
        pe.setList(list);
        return pe;
    }
}

模板生成

接下来是生成模板的主函数:

package com.cppba.core;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * 开发者
 * nickName:星缘
 * email:1342541819@qq.com
 * github:https://github.com/bigbeef
 */

public class Main {

    static String domainName = "Articles"; //类名
    static String packageName = "com.cppba";//类包

    static String templateDir = "\\src\\main\\webapp\\template\\";
    static String sourcePath = System.getProperty("user.dir")+templateDir;
    static String resultDir = "\\out";
    static String targetPath = System.getProperty("user.dir")
            + resultDir + "\\"
            + packageName.replace(".", "\\");

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

        Map<String,Object> map = new HashMap();
        map.put("DaoTemplate.java","dao/" + domainName + "Dao.java");
        map.put("ServiceTemplate.java","service/" + domainName + "Service.java");
        map.put("ServiceImplTemplate.java","service/impl/" + domainName + "ServiceImpl.java");
        map.put("DtoTemplate.java","dto/" + domainName + "Dto.java");

        for(String templateFile:map.keySet()){
            String targetFile = (String) map.get(templateFile);
            Properties pro = new Properties();
            pro.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
            pro.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
            pro.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, sourcePath);
            VelocityEngine ve = new VelocityEngine(pro);

            VelocityContext context = new VelocityContext();
            context.put("domainName",domainName);
            context.put("packageName",packageName);

            Template t = ve.getTemplate(templateFile, "UTF-8");

            File file = new File(targetPath, targetFile);
            if (!file.getParentFile().exists())
                file.getParentFile().mkdirs();
            if (!file.exists())
                file.createNewFile();

            FileOutputStream outStream = new FileOutputStream(file);
            OutputStreamWriter writer = new OutputStreamWriter(outStream,
                    "UTF-8");
            BufferedWriter sw = new BufferedWriter(writer);
            t.merge(context, sw);
            sw.flush();
            sw.close();
            outStream.close();
            System.out.println("成功生成 Java 文件:"
                    + (targetPath + targetFile).replaceAll("/", "\\\\"));
        }
    }
}

生成java文件

我们可以修改 domainNamepackageName 来修改我们的包名和类名,我们运行下看:

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

我们看到生成成功,我们打开 ArticlesServiceImpl.java 看下:

package com.cppba.service.impl;

import com.cppba.core.bean.PageEntity;
import com.cppba.dao.ArticlesDao;
import com.cppba.dto.ArticlesDto;
import com.cppba.dto.BaseDto;
import com.cppba.entity.Articles;
import com.cppba.service.ArticlesService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 开发者
 * nickName:星缘
 * email:1342541819@qq.com
 * github:https://github.com/bigbeef
 * velocity模板生成 cppba-codeTemplate
 */
@Service
@Transactional
public class ArticlesServiceImpl implements ArticlesService{
    @Resource
    private ArticlesDao articlesDao;

    @Override
    public void save(Articles articles) {
        articlesDao.save(articles);
    }

    @Override
    public void delete(Articles articles) {
        articlesDao.delete(articles);
    }

    @Override
    public void update(Articles articles) {
        articlesDao.update(articles);
    }

    @Override
    public Articles findById(int id) {
        return (Articles) articlesDao.get(Articles.class, id);
    }

    @Override
    public PageEntity<Articles> query(BaseDto baseDto) {
        String hql = " select distinct articles from Articles articles where 1=1 ";
        Map params = new HashMap<String,Object>();

        ArticlesDto articlesDto = (ArticlesDto)baseDto;
        Articles articles = articlesDto.getArticles();
        int page = articlesDto.getPage();
        int pageSize = articlesDto.getPageSize();

        List list = articlesDao.query(hql,params,page,pageSize);
        long count = articlesDao.count(hql,params);
        PageEntity<Articles> pe = new PageEntity<Articles>();
        pe.setCount(count);
        pe.setList(list);
        return pe;
    }
}

生成成功,我们拷贝到 cppba-web 中可完美运行!

写在最后

欢迎 关注喜欢 、和 点赞 后续将推出更多的 工具集 教程,敬请期待。

欢迎关注我的 微信公众号 获取更多更全的学习资源,视频资料,技术干货!

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

公众号回复“ 学习 ”,拉你进 程序员技术讨论群干货资源 第一时间分享。

公众号回复“ 视频 ”,领取 800GJava 视频学习资源。

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

公众号回复“ 全栈 ”,领取 1T前端Java产品经理微信小程序Python 等资源合集大放送。

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

公众号回复“ 慕课 ”,领取 1T慕课实战 学习资源。

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

公众号回复“ 实战 ”,领取 750G项目实战 学习资源。

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

公众号回复“ 面试 ”,领取 8G面试实战 学习资源。

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码

工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Rework

Rework

Jason Fried、David Heinemeier Hansson / Crown Business / 2010-3-9 / USD 22.00

"Jason Fried and David Hansson follow their own advice in REWORK, laying bare the surprising philosophies at the core of 37signals' success and inspiring us to put them into practice. There's no jarg......一起来看看 《Rework》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具