1. 程式人生 > >利用Velocity自動生成自定義程式碼_java版_原始碼下載

利用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

/**
 * 
 */
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;
    }
    
    
}
Bean.java
/**
 * 
 */
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