java模板引擎:velocity
在java中,同型別的模組程式碼結構往往是相似的。以Spring為例,一個工程都會包含controller,service,dao,modal等型別的程式碼。而dao用於資料庫的訪問,不同的表所對應的dao類都會有get,set,select,delete等操作,若手動編寫dao,則這些dao有很多程式碼是類似的。於是希望自動生成這部分程式碼。
一個非常直觀的思路就是:寫一個String模板,然後使用字串替換的方式,將該模板中的某些預留字串替換為具體值。這樣就得到了目標檔案的內容。然後將這個替換後的String寫入到目標檔案中即可。
velocity的功能就是讀入一個模板,然後執行替換操作,從而生成目標String。
引入velocity
<!--velocity模板引擎依賴-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
編寫一個模板檔案
模板檔案使用vm檔案。在main/resources/下建立一個vm資料夾,然後在下面新增一個controller.java.vm檔案:
package ${package}.controller;
public class ${className}Controller {
public void get${Object}() {
}
public void set${Object}() {
}
}
其中使用${}包裹的內容為變數,在後面會被替換。未被包裹的內容維持不變,包括空格,Tab和換行。
使用
首先需要定義並初始化VelocityEngine:
VelocityEngine ve = new VelocityEngine();
// 設定資源路徑
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
// 初始化
ve.init();
然後將模板載入到一個Template物件中:
// 載入模板
Template t = ve.getTemplate("vm/controller.java.vm");
使用VelocityContext定義替換的規則:
VelocityContext ctx = new VelocityContext();
ctx.put("package", "com.spring.template");
ctx.put("className", "test");
ctx.put("Object", "Value");
VelocityContext也可以直接接收一個Map物件:
Map contextMap = new HashMap();
contextMap.put("package", "com.spring.template");
contextMap.put("className", "test");
contextMap.put("Object", "Value");
VelocityContext ctx = new VelocityContext(contextMap);
定義一個StringWriter來儲存合併後的結果:
StringWriter sw = new StringWriter();
t.merge(ctx, sw);
String r = sw.toString();
執行該程式碼,最終生成結果為:
package com.spring.template.controller;
@Mapper
public interface testController {
public void getValue() {
}
public void setValue() {
}
}
關於資料庫自動生成
類似MyBatis那樣,從資料庫直接對映出對應的Dao,xml與model類。
關鍵點在於需要使用select語句查詢出指定表的結構。有了表結構,就可以動態生成增刪改查的sql語句,同樣也可以使用vm來動態生成model類。
vm僅僅作為模板,替換模板中的變數後,生成的內容可以寫到各種型別的檔案中,例如.java,.xml,.properties等。
相關文章
- JavaScript 模板引擎 Velocity.jsJavaScriptJS
- Velocity模板技術
- Thymeleaf(Java模板引擎)Java
- Java模板引擎之FreeMarkerJava
- Beetl 1.25 釋出,java模板引擎Java
- Django 模板引擎以及模板Django
- JS模板引擎JS
- Python 模板引擎Python
- PHP模板引擎simplePhpTmpPHP
- JavaScript 模板引擎概述JavaScript
- jsp,velocity,freemark頁面引擎的比較JS
- 模板引擎使用詳解:包含公共模板
- 手擼 JavaScript 模板引擎JavaScript
- PHPTAL模板引擎語法PHP
- Express 文件(使用模板引擎)Express
- ejs模板引擎原理JS
- JavaScript模板引擎綜述JavaScript
- smarty模板引擎視訊教程
- Python 模板引擎比較Python
- 閱讀優秀的JAVA模板引擎Beetl的使用說明有感Java
- Tornado框架02-模板引擎框架
- PHP 模板引擎用到的核心方法PHP
- Express基礎瞭解—模板引擎Express
- Flask 使用Jinja2模板引擎Flask
- 如何選擇 Web 前端模板引擎?Web前端
- javascript簡單模板引擎介紹JavaScript
- 如何選擇Web前端模板引擎?Web前端
- gf框架之模板引擎 – 基本用法框架
- Spring Boot實戰:模板引擎Spring Boot
- 非常好用的PHP模板引擎PHP
- casid/jte:用於Java和Kotlin的Jsp/Java的Web模板引擎JavaKotlinJSWeb
- 自研 PHP 框架 1.1_模板引擎PHP框架
- 前端模板引擎doT.js的使用前端JS
- Spring Boot (四)模板引擎Thymeleaf整合Spring Boot
- [譯] 只有 20 行的 JavaScript 模板引擎JavaScript
- 前端模板引擎Handlebars理解與舉例前端
- 前端資料模板引擎的總結前端
- 前端模板引擎的實現總結前端