利用Velocity自動生成自定義程式碼_java版_原始碼下載
Velocity很多企業都要求要會,其實也不難,重要的是練過啊,實踐出真知。對於有多年開發經驗的人而言其實是比較簡單的,但是卻有可能在實際開發中從來沒用過,我就是其中之一。此篇部落格借鑑程式設計師的Velocity經驗來加以學習。
專案結構:
執行效果:你可能會看到專案中有報錯,不用著急,這個不會影響到你的專案執行。
把其中的User類拿出來,給大家分享一下:
自動生成UserDao.java效果:
自動生成UserDaoImpl.java效果:
自動生成UserService.java效果:
自動生成UserServiceImpl.java效果:
我想大家看到這裡,是不是有親自動手試試的興奮感覺....
=======================================================
=======================================================
User.java
/**
*
*/
package com.b510.base.bean;
/**
* @author hongten<br>
* @date 2013-3-10
*/
public class User {
}
Annotation.java
Bean.java/** * */ package com.b510.base.bean.install; /** * 註釋 * @author hongten<br> * @date 2013-3-10 */ public class Annotation { /** * 作者名稱 */ private String authorName; /** * 作者郵箱 */ private String authorMail; /** * 日期 */ private String date; /** * 版本 */ private String version; public String getAuthorName() { return authorName; } public void setAuthorName(String authorName) { this.authorName = authorName; } public String getAuthorMail() { return authorMail; } public void setAuthorMail(String authorMail) { this.authorMail = authorMail; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } }
/** * */ package com.b510.base.bean.install; /** * bean類 * * @author hongten<br> * @date 2013-3-10 */ public class Bean { /** bean 名稱 */ private String name; /** bean 首字母小寫名稱 */ private String lowerName; /** bean 路徑 */ private String beanUrl; /** dao 路徑 */ private String beanDaoUrl; /** dao 實現路徑 */ private String beanDaoImplUrl; /** service 路徑 */ private String beanServiceUrl; /** service 實現路徑 */ private String beanServiceImplUrl; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLowerName() { return lowerName; } public void setLowerName(String lowerName) { this.lowerName = lowerName; } public String getBeanUrl() { return beanUrl; } public void setBeanUrl(String beanUrl) { this.beanUrl = beanUrl; } public String getBeanDaoUrl() { return beanDaoUrl; } public void setBeanDaoUrl(String beanDaoUrl) { this.beanDaoUrl = beanDaoUrl; } public String getBeanDaoImplUrl() { return beanDaoImplUrl; } public void setBeanDaoImplUrl(String beanDaoImplUrl) { this.beanDaoImplUrl = beanDaoImplUrl; } public String getBeanServiceUrl() { return beanServiceUrl; } public void setBeanServiceUrl(String beanServiceUrl) { this.beanServiceUrl = beanServiceUrl; } public String getBeanServiceImplUrl() { return beanServiceImplUrl; } public void setBeanServiceImplUrl(String beanServiceImplUrl) { this.beanServiceImplUrl = beanServiceImplUrl; } }
BeanUtils.java
/**
*
*/
package com.b510.base.bean.install;
import java.io.File;
import java.io.FileWriter;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
/**
* @author hongten<br>
* @date 2013-3-10
*/
public class BeanUtils {
public static final String BEAN_DAO_TEMPLATE_VM_PATH = "src/vms/beanDao.vm";
public static final String BEAN_DAO_IMPL_TEMPLATE_VM_PATH = "src/vms/beanDaoImpl.vm";
public static final String BEAN_SERVICE_TEMPLATE_VM_PATH = "src/vms/beanService.vm";
public static final String BEAN_SERVICE_IMPL_TEMPLATE_VM_PATH = "src/vms/beanServiceImpl.vm";
//檔案 地址
//private static final String BEAN_PATH = "com/b510/base/bean";
private static final String DAO_PATH = "com/b510/base/dao";
private static final String DAO_IMPL_PATH = "com/b510/base/dao/impl";
private static final String SERVICE_PATH = "com/b510/base/service";
private static final String SERVICE_IMPL_PATH = "com/b510/base/service/impl";
//包名
private static final String BEAN_URL = "com.b510.base.bean";
private static final String DAO_URL = "com.b510.base.dao";
private static final String DAO_IMPL_URL = "com.b510.base.dao.impl";
private static final String SERVICE_URL = "com.b510.base.service";
private static final String SERVICE_IMPL_URL = "com.b510.base.service.impl";
private static Bean bean = new Bean();
private static Annotation annotation = new Annotation();
/**
* 初始化bean和註解
* @param c
*/
public void init(Class c){
if(c != null){
String cName = c.getName();
bean.setName(getLastChar(cName));
bean.setBeanUrl(cName);
bean.setLowerName(getLowercaseChar(getLastChar(cName)));
annotation.setAuthorName("hongten");
annotation.setAuthorMail("[email protected]");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd");
annotation.setDate(simpleDateFormat.format(new Date()));
annotation.setVersion("1.0");
}
}
/**
* 建立bean的Dao<br>
*
* @param c
* @throws Exception
*/
public void createBeanDao(Class c) throws Exception {
String cName = c.getName();
String path = System.getProperty("user.dir") + "/src/" + DAO_PATH
+ "/";
File filePath = new File(path);
createFilePath(filePath);
String fileName = path + getLastChar(cName) + "Dao.java";
File file = new File(fileName);
FileWriter fw = new FileWriter(file);
bean.setBeanDaoUrl(DAO_URL);
fw.write(createCode(BEAN_DAO_TEMPLATE_VM_PATH,bean,annotation));
fw.flush();
fw.close();
showInfo(fileName);
}
/**
* 建立bean的Dao的實現<br>
*
* @param c
* @throws Exception
*/
public void createBeanDaoImpl(Class c) throws Exception {
String cName = c.getName();
String path = System.getProperty("user.dir") + "/src/" + DAO_IMPL_PATH
+ "/";
File filePath = new File(path);
createFilePath(filePath);
String fileName = path + getLastChar(cName) + "DaoImpl.java";
File file = new File(fileName);
FileWriter fw = new FileWriter(file);
bean.setBeanDaoUrl(DAO_URL);
bean.setBeanDaoImplUrl(DAO_IMPL_URL);
fw.write(createCode(BEAN_DAO_IMPL_TEMPLATE_VM_PATH,bean,annotation));
fw.flush();
fw.close();
showInfo(fileName);
}
/**
* 建立bean的Service<br>
*
* @param c
* @throws Exception
*/
public void createBeanService(Class c) throws Exception {
String cName = c.getName();
String path = System.getProperty("user.dir") + "/src/" + SERVICE_PATH
+ "/";
File filePath = new File(path);
createFilePath(filePath);
String fileName = path + getLastChar(cName) + "Service.java";
File file = new File(fileName);
FileWriter fw = new FileWriter(file);
bean.setBeanServiceUrl(SERVICE_URL);
fw.write(createCode(BEAN_SERVICE_TEMPLATE_VM_PATH,bean,annotation));
fw.flush();
fw.close();
showInfo(fileName);
}
/**
* 建立bean的Service的實現<br>
*
* @param c
* @throws Exception
*/
public void createBeanServiceImpl(Class c) throws Exception {
String cName = c.getName();
String path = System.getProperty("user.dir") + "/src/" + SERVICE_IMPL_PATH
+ "/";
File filePath = new File(path);
createFilePath(filePath);
String fileName = path + getLastChar(cName) + "ServiceImpl.java";
File file = new File(fileName);
FileWriter fw = new FileWriter(file);
bean.setBeanDaoUrl(DAO_URL);
bean.setBeanServiceUrl(SERVICE_URL);
bean.setBeanServiceImplUrl(SERVICE_IMPL_URL);
fw.write(createCode(BEAN_SERVICE_IMPL_TEMPLATE_VM_PATH,bean,annotation));
fw.flush();
fw.close();
showInfo(fileName);
}
/**
* 根據模板生成程式碼
* @param fileVMPath 模板路徑
* @param bean 目標bean
* @param annotation 註釋
* @return
* @throws Exception
*/
public String createCode(String fileVMPath,Bean bean,Annotation annotation) throws Exception{
VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.setProperty("input.encoding", "UTF-8");
velocityEngine.setProperty("output.encoding", "UTF-8");
velocityEngine.init();
Template template = velocityEngine.getTemplate(fileVMPath);
VelocityContext velocityContext = new VelocityContext();
velocityContext.put("bean", bean);
velocityContext.put("annotation", annotation);
StringWriter stringWriter = new StringWriter();
template.merge(velocityContext, stringWriter);
return stringWriter.toString();
}
/**
* 建立檔案
* @param file
*/
public void createFilePath(File file){
if(!file.exists()){
System.out.println("建立["+file.getAbsolutePath()+"]情況:"+file.mkdirs());
}else{
System.out.println("存在目錄:"+file.getAbsolutePath());
}
}
/**
* 獲取路徑的最後面字串<br>
* 如:<br>
* <code>str = "com.b510.base.bean.User"</code><br>
* <code> return "User";<code>
* @param str
* @return
*/
public String getLastChar(String str) {
if ((str != null) && (str.length() > 0)) {
int dot = str.lastIndexOf('.');
if ((dot > -1) && (dot < (str.length() - 1))) {
return str.substring(dot + 1);
}
}
return str;
}
/**
* 把第一個字母變為小寫<br>
* 如:<br>
* <code>str = "UserDao";</code><br>
* <code>return "userDao";</code>
* @param str
* @return
*/
public String getLowercaseChar(String str){
return str.substring(0,1).toLowerCase()+str.substring(1);
}
/**
* 顯示資訊
* @param info
*/
public void showInfo(String info){
System.out.println("建立檔案:"+ info+ "成功!");
}
/**
* 獲取系統時間
* @return
*/
public static String getDate(){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
return simpleDateFormat.format(new Date());
}
}
BeanUtilsTest.java/**
*
*/
package com.b510.base.bean.install;
import com.b510.base.bean.Admin;
import com.b510.base.bean.People;
import com.b510.base.bean.User;
/**
* @author hongten<br>
* @date 2013-3-10
*/
public class BeanUtilsTest{
public static void main(String[] args) throws Exception{
BeanUtilsTest beanUtilTest = new BeanUtilsTest();
BeanUtils beanUtils = new BeanUtils();
beanUtilTest.beanTool(beanUtils, User.class);
beanUtilTest.beanTool(beanUtils, People.class);
beanUtilTest.beanTool(beanUtils, Admin.class);
}
/**
* 根據bean生成相應的檔案
* @param beanUtils
* @param c
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void beanTool(BeanUtils beanUtils ,Class c)throws Exception{
beanUtils.init(c);
beanUtils.createBeanDao(c);
beanUtils.createBeanDaoImpl(c);
beanUtils.createBeanService(c);
beanUtils.createBeanServiceImpl(c);
}
}
beanDao.vm##create bean dao,this is a interface
package $!{bean.beanDaoUrl};
import com.blackants.core.dao.BaseDao;
import $!{bean.beanUrl};
/**
* @author <a href="mailto:$!{annotation.authorMail}">$!{annotation.authorName}</a>
* @date $!{annotation.date}
*
* @version $!{annotation.version}
*/
public interface $!{bean.name}Dao extends BaseDao<$!{bean.name}> {
}
beanDaoImpl.vm
##create bean daoImpl,this is a class
package $!{bean.beanDaoImplUrl};
import com.blackants.core.dao.impl.AbstractBaseDaoImpl;
import $!{bean.beanDaoUrl}.$!{bean.name}Dao;
import $!{bean.beanUrl};
/**
* @author <a href="mailto:$!{annotation.authorMail}">$!{annotation.authorName}</a>
* @date $!{annotation.date}
*
* @version $!{annotation.version}
*/
public class $!{bean.name}DaoImpl extends AbstractBaseDaoImpl<$!{bean.name}> implements $!{bean.name}Dao{
}
beanService.vm##create bean service,this is a interface
package $!{bean.beanServiceUrl};
import com.blackants.core.service.BaseService;
import $!{bean.beanUrl};
/**
* @author <a href="mailto:$!{annotation.authorMail}">$!{annotation.authorName}</a>
* @date $!{annotation.date}
*
* @version $!{annotation.version}
*/
public interface $!{bean.name}Service extends BaseService<$!{bean.name}> {
}
beanServiceImpl.vm
##create bean serviceImpl,this is a class
package $!{bean.beanServiceImplUrl};
import com.blackants.core.service.impl.AbstractBaseServiceImpl;
import com.blackants.core.dao.BaseDao;
import $!{bean.beanDaoUrl}.$!{bean.name}Dao;
import $!{bean.beanServiceUrl}.$!{bean.name}Service;
import $!{bean.beanUrl};
/**
* @author <a href="mailto:$!{annotation.authorMail}">$!{annotation.authorName}</a>
* @date $!{annotation.date}
*
* @version $!{annotation.version}
*/
public class $!{bean.name}ServiceImpl extends AbstractBaseServiceImpl<$!{bean.name}> implements $!{bean.name}Service{
/**
* $!{bean.lowerName} Dao
*/
private $!{bean.name}Dao $!{bean.lowerName}Dao;
@Override
public BaseDao<$!{bean.name}> getBaseDao() {
return $!{bean.lowerName}Dao;
}
// =================setter================= //
public void setActivationCodeDao($!{bean.name}Dao $!{bean.lowerName}Dao) {
this.$!{bean.lowerName}Dao = $!{bean.lowerName}Dao;
}
}
下載說明:
如果你下載了此壓縮包,並且在你的本地匯入eclipse,執行程式你會發現系統找不到:
com.blackants.core.dao.BaseDao;(interface)
com.blackants.core.dao.impl.AbstractBaseDaoImpl;(class)
com.blackants.core.service.BaseService;(interface)
com.blackants.core.service.impl.AbstractBaseServiceImpl;(class)
上面所列出的檔案,這個不用著急,你可以在專案中新建這些package,然後加入就可以啦
相關推薦
利用Velocity自動生成自定義程式碼_java版_原始碼下載
Velocity很多企業都要求要會,其實也不難,重要的是練過啊,實踐出真知。對於有多年開發經驗的人而言其實是比較簡單的,但是卻有可能在實際開發中從來沒用過,我就是其中之一。此篇部落格借鑑程式設計師的Velocity經驗來加以學習。 專案結構: 執行效果:你可能會看到專案
gradle配置自動生成自定義apk名稱
android.applicationVariants.all { variant -> variant.outputs.each { output -> def o
Spring boot入門(三):SpringBoot整合結合AdminLTE(Freemarker),利用generate自動生成程式碼,利用DataTable和PageHelper進行分頁顯示
關於SpringBoot和PageHelper,前篇部落格已經介紹過Spring boot入門(二):Spring boot整合MySql,Mybatis和PageHelper外掛,前篇部落格大致講述了SpringBoot如何整合Mybatis和Pagehelper,但是沒有做出實際的範例,本篇部落格是連
js利用閉包封裝自定義模塊的幾種方法
暴露 使用 模塊化 function 一個 com 調用方法 urn ted 1.自定義模塊: 具有特定功能的js文件 將所有的數據和功能都封裝在一個函數的內部 只向外暴露一個包含有n個方法的對象或者函數 模塊使用者只需要通過模塊暴露的對象調用方法來
利用echarts highcharts 實現自定義地圖 關系圖效果 側邊3D柱形圖餅圖散點圖
技術 ges 散點圖 chart blog 餅圖 git 分享 charts github 地址: https://https://github.com/Gengshaoxuan/medataMap github 地址: https://https://github.c
SpringBoot19 利用mybatis自動生成項目
1.8 color === urn view 技術 java pre 4.0 1 環境配置 2 新建一個新的springboot項目 2.1 選擇一些必要的依賴 web jpa mysql <?xml version="1.0" enco
mybatis generator為實體類生成自定義註釋(讀取數據庫字段的註釋添加到實體類,不修改源碼)
super() .cn setter www. nts art pca target private 我們都知道mybatis generator自動生成的註釋沒什麽實際作用,而且還增加了代碼量。如果能將註釋從數據庫中撈取到,不僅能很大程度上增加代碼的可讀性,而且減少了後期
c++ 利用巨集自動生成get set 方法
1.非指標型別的成員變數的生成 // PropertyBuilderByName 用於生成類的成員變數 // 並生成set和get方法 // type 為變數型別 // access_permission 為變數的訪問許可權(public, priavte, protected)
testng生成自定義html報告
目錄 實現原理 原始碼展示 定義測試結果類TestResult 定義 TestResultCollection 集合類 自定義測試報告模板report.vm 擴充套件實現IReporter介面 工具類 testng自帶的報告,有如下幾個問題: 1. 不是很美觀
[UWP]為附加屬性和依賴屬性自定義程式碼段(相容UWP和WPF)
1. 前言 之前介紹過依賴屬性和附加屬性的程式碼段,這兩個程式碼段我用了很多年,一直都幫了我很多。不過這兩個程式碼段我也多年沒修改過,Resharper老是提示我生成的程式碼可以修改,它這麼有誠意,這次就只好從了它,順便簡單介紹下怎麼自定義程式碼段。 2. VisualStudio自帶程式碼段的問題 以
EF學習筆記——生成自定義實體類
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
ios拒審4.3 python自動生成辣雞程式碼
配置檔案config.json [ { "key" : "jiebabuyuxiniubuyu", "add_func_num" :1, "lua_in_path":"../../../..", "lua_out_p
根據元素title值生成自定義樣式提示框
/** * 根據元素title值生成自定義提示框 * @param id 生成title樣式的dom元素 */ function createTitle(id){ var x = 10; var y = 20; var newtitle = ''; $(id)
白鷺引擎生成自定義整數隨機數
白鷺引擎 版本:5.2.8 描述:白鷺引擎生成自定義整數隨機數 生成指定的隨機數程式碼: /** * 生成指定的隨機數 */ private random_num(min:number,max:number){
AndroidStudio生成自定義的混淆jar包(同時將assets目錄打入jar包)(二)(by 星空武哥)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
idea 利用maven自動生成dao、dto、mapper檔案
1.在pom檔案中新增maven依賴 <build> <finalName>lottery-common</finalName> <plugins> <plugi
如何生成自定義的逆向檔案頻率(IDF)文字語料庫(二)
一、什麼是IDF文字語料庫 在jieba的TF-IDF模型裡面,當呼叫獲取關鍵詞的函式 jieba.analyse.extract_tags() 的時候,該函式會呼叫預設的IDF語料庫。IDF語料庫就是jieba官方在大量文字的基礎上,通過 計算得到的一
如何生成自定義的逆向檔案頻率(IDF)文字語料庫(一)
在基於TF-IDF進行特徵提取時,因為文字背景是某一具體行業,不適合使用通用的IDF語料庫,我覺得應該使用自定義的基於該行業背景的IDF語料庫。請問如何生成自定義IDF語料庫呢? 我現在有的資料是幾十萬個該行業的文件,初步想法是:對每個文件分詞去重,把所有文件分詞結果彙集去重後
springboot自動切自定義配置
<plugin> <artifactId>maven-resources-plugin</artifactId> <executions> <execution> <id>co
VSCode 如何操作使用者自定義程式碼片段(快捷鍵)
如何操作使用者自定義程式碼片段(快捷鍵)? 第一步:檔案==>首選項==>使用者程式碼片段 第二步:選擇程式碼片段檔案 html.json 第三步:輸入要自定義的快捷鍵 和 模板程式碼段 { "vh": { "prefix