内容简介:不知道大家有没有这样的感觉,在平时开发中,经常有很多参考项目:个人博客:
前言
不知道大家有没有这样的感觉,在平时开发中,经常有很多 dao
、 service
类中存着很多重复的代码, Velocity
提供了模板生成工具,今天我教大家怎么和这些大量的重复代码说再见。
参考项目: https://github.com/bigbeef/cppba-codeTemplate
个人博客: http://www.zhangbox.cn
注意
大家可以写适合自己的模板,这里为了演示,就直接拿 cppba-web
的模板来示范,至于 velocity
的语法大家可以查看这篇文章:
maven配置
<!-- velocity --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency>
创建模板文件
首先看下目录结构:
这里演示我就只贴出 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文件
我们可以修改 domainName
和 packageName
来修改我们的包名和类名,我们运行下看:
我们看到生成成功,我们打开 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
中可完美运行!
写在最后
欢迎 关注 、 喜欢 、和 点赞 后续将推出更多的 工具集 教程,敬请期待。
欢迎关注我的 微信公众号 获取更多更全的学习资源,视频资料,技术干货!
公众号回复“ 学习 ”,拉你进 程序员技术讨论群 , 干货资源 第一时间分享。
公众号回复“ 视频 ”,领取 800GJava 视频学习资源。
公众号回复“ 全栈 ”,领取 1T前端 , Java , 产品经理 , 微信小程序 , Python 等资源合集大放送。
公众号回复“ 慕课 ”,领取 1T慕课实战 学习资源。
公众号回复“ 实战 ”,领取 750G项目实战 学习资源。
公众号回复“ 面试 ”,领取 8G面试实战 学习资源。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Java 通用代码生成器光 2.2.0 智慧版本尝鲜版公布,新增模板向导,代码界面和模板生成完美支持
- 分区表改造:脚本模板生成
- 分区表改造:脚本模板生成
- 《干货分享》--分区表改造(脚本模板生成)
- MoliCode 2.0 发布,自定义模板代码生成
- 使用LiveDocx和Zend Framework生成基于模板的文档
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Developer's Guide to Social Programming
Mark D. Hawker / Addison-Wesley Professional / 2010-8-25 / USD 39.99
In The Developer's Guide to Social Programming, Mark Hawker shows developers how to build applications that integrate with the major social networking sites. Unlike competitive books that focus on a s......一起来看看 《Developer's Guide to Social Programming》 这本书的介绍吧!