1、

String sql = null;
if(null == renderType || renderType.equals(ConstantRender.sql_renderType_beetl)){
if(log.isDebugEnabled()) log.debug("beetl解析sql");
sql = BeetlKit.render(sqlTemplete, param); } else if(renderType.equals(ConstantRender.sql_renderType_freeMarker)){
if(log.isDebugEnabled()) log.debug("FreeMarker解析sql");
sql = ToolFreeMarker.render(sqlTemplete, param); } else if(renderType.equals(ConstantRender.sql_renderType_velocity)){
if(log.isDebugEnabled()) log.debug("Velocity解析sql");
sql = ToolVelocity.render(sqlTemplete, param);
} 2、beetl:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
// package org.beetl.core; import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.beetl.core.resource.StringTemplateResourceLoader;
import org.beetl.ext.fn.GetValueFunction; public class BeetlKit {
public static GroupTemplate gt = null; public BeetlKit() {
} public static String render(String template, Map<String, Object> paras) {
Template t = gt.getTemplate(template);
t.binding(paras);
return t.render();
} public static void renderTo(String template, Writer writer, Map<String, Object> paras) {
Template t = gt.getTemplate(template);
t.binding(paras);
t.renderTo(writer);
} public static void execute(String script, Map<String, Object> paras) {
execute(script, paras, (String[])null);
} public static Map execute(String script, Map<String, Object> paras, String[] locals) {
String start = gt.getConf().getStatementStart();
String end = gt.getConf().getStatementEnd();
StringBuilder sb = new StringBuilder(script.length() + start.length() + end.length());
sb.append(start).append(script);
if (locals != null) {
sb.append("beetlKit(");
String[] var6 = locals;
int var7 = locals.length; for(int var8 = 0; var8 < var7; ++var8) {
String varName = var6[var8];
sb.append("'").append(varName).append("',").append(varName).append("!,");
} sb.setLength(sb.length() - 1);
sb.append(");");
} sb.append(end);
Template t = gt.getTemplate(sb.toString());
t.binding(paras);
HashMap map = new HashMap();
t.binding("beetlKitMap", map);
t.render();
return map;
} public static Map executeAndReturnRootScopeVars(String script) {
String start = gt.getConf().getStatementStart();
String end = gt.getConf().getStatementEnd();
StringBuilder sb = new StringBuilder(script.length() + start.length() + end.length());
sb.append(start).append(script);
sb.append(end);
Template t = gt.getTemplate(sb.toString());
t.render();
Map<String, Integer> idnexMap = t.program.metaData.getTemplateRootScopeIndexMap();
Object[] values = t.ctx.vars;
Map<String, Object> result = new HashMap();
Iterator var8 = idnexMap.entrySet().iterator(); while(var8.hasNext()) {
Entry<String, Integer> entry = (Entry)var8.next();
String name = (String)entry.getKey();
int index = (Integer)entry.getValue();
Object value = values[index];
result.put(name, value);
} return result;
} public static String testTemplate(String template, String initValue) {
Map map = executeAndReturnRootScopeVars(initValue);
String result = render(template, map);
return result;
} public static void main(String[] args) {
String template = "${a}";
String initValue = "var a=1,c=2+1";
String result = testTemplate(template, initValue);
System.out.println(result);
} static {
StringTemplateResourceLoader resourceLoader = new StringTemplateResourceLoader(); Configuration cfg;
try {
cfg = Configuration.defaultConfiguration();
} catch (IOException var3) {
throw new RuntimeException(var3);
} gt = new GroupTemplate(resourceLoader, cfg);
gt.registerFunction("beetlKit", new GetValueFunction());
gt.setErrorHandler(new ConsoleErrorHandler() {
protected void println(Writer w, String msg) {
try {
w.write(msg);
w.write(10);
} catch (IOException var4) {
var4.printStackTrace();
} } protected void print(Writer w, String msg) {
try {
w.write(msg);
} catch (IOException var4) {
var4.printStackTrace();
} } protected void printThrowable(Writer w, Throwable t) {
t.printStackTrace(new PrintWriter(w));
} protected String getResourceName(String resourceId) {
return resourceId.length() > 10 ? resourceId.substring(0, 10).concat("...") : resourceId;
}
});
}
} 3、FreeMarker:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Map; import com.jfinal.log.Log; import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException; /**
* FreeMarker工具类
*/
public abstract class ToolFreeMarker { private static final Log log = Log.getLog(ToolFreeMarker.class); /**
* 渲染模板
* @param templateContent
* @param paramMap
* @return
*/
public static String render(String templateContent, Map<String, Object> paramMap) {
StringWriter writer = new StringWriter();
try {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);
cfg.setTemplateLoader(new StringTemplateLoader(templateContent));
cfg.setDefaultEncoding("UTF-8"); Template template = cfg.getTemplate(""); template.process(paramMap, writer);
} catch (IOException e) {
e.printStackTrace();
if(log.isErrorEnabled()) log.error(e.getMessage());
} catch (TemplateException e) {
e.printStackTrace();
if(log.isErrorEnabled()) log.error(e.getMessage());
}
return writer.toString();
} /**
* 生成HTML
* @param tlDirectory tl模板目录
* @param tlName ftl模板
* @param paramMap 参数map
* @param htmlPath 生成HTML存放路径
*/
public static void makeHtml(String tlDirectory, String tlName, Map<String, Object> paramMap, String htmlPath) {
FileOutputStream fileOutputStream = null;
OutputStreamWriter outputStreamWriter = null;
try {
Configuration configuration = new Configuration(Configuration.VERSION_2_3_22);
File file = new File(tlDirectory);// .ftl模板目录
configuration.setDirectoryForTemplateLoading(file);
configuration.setObjectWrapper(new DefaultObjectWrapper(Configuration.VERSION_2_3_22));
Template template = configuration.getTemplate(tlName, ToolString.encoding); File file2 = new File(htmlPath);// 生成html目录
fileOutputStream = new FileOutputStream(file2);
outputStreamWriter = new OutputStreamWriter(fileOutputStream, ToolString.encoding);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
template.process(paramMap, bufferedWriter);
bufferedWriter.flush();
outputStreamWriter.close();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} finally {
if (null != fileOutputStream) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != outputStreamWriter) {
try {
outputStreamWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} } class StringTemplateLoader implements TemplateLoader { private String template; public StringTemplateLoader(String template) {
this.template = template;
if (template == null) {
this.template = "";
}
} public void closeTemplateSource(Object templateSource) throws IOException {
((StringReader) templateSource).close();
} public Object findTemplateSource(String name) throws IOException {
return new StringReader(template);
} public long getLastModified(Object templateSource) {
return 0;
} public Reader getReader(Object templateSource, String encoding) throws IOException {
return (Reader) templateSource;
} } 4、Velocity:
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Map;
import java.util.Set; import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException; import com.jfinal.log.Log; /**
* Velocity工具类
*/
public abstract class ToolVelocity { @SuppressWarnings("unused")
private static final Log log = Log.getLog(ToolVelocity.class); /**
* 渲染模板
* @param templateContent
* @param paramMap
* @return
*/
public static String render(String templateContent, Map<String, Object> paramMap) {
// 初始化并取得Velocity引擎
VelocityEngine ve = new VelocityEngine();
ve.init(); // 取得velocity的上下文context
VelocityContext context = new VelocityContext(); Set<String> keys = paramMap.keySet();
for (String key : keys) {
context.put(key, paramMap.get(key));// 把数据填入上下文
} // 输出流
StringWriter writer = new StringWriter(); // 转换输出
ve.evaluate(context, writer, "", templateContent); // 关键方法 return writer.toString();
} /**
* 生成静态html
* @param tlPath 模板路径
* @param paramMap 参数
* @param htmlPath html文件保存路径
*/
public static void makeHtml(String tlPath, Map<String, Object> paramMap, String htmlPath) {
PrintWriter pw = null;
try {
//初始化vm模板
Template template = Velocity.getTemplate(tlPath, "UTF-8"); //初始化上下文
VelocityContext context = new VelocityContext(); //添加数据到上下文中
Set<String> keys = paramMap.keySet();
for (String key : keys) {
context.put(key, paramMap.get(key));
} //生成html页面
pw = new PrintWriter(htmlPath);
template.merge(context, pw);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ResourceNotFoundException e) {
e.printStackTrace();
} catch (ParseErrorException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(pw != null ){
//关闭流
pw.close();
}
}
} }

使用不同模板引擎beetl、FreeMarker、Velocity动态解析sql的方法的更多相关文章

  1. Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法

    详细说明:Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法.该方法可以在运行时在内存中直接建立对话框资源,使用起来更为灵活.适用于多个开发项目共享有界面的公用程序模 ...

  2. Java模板引擎之Freemarker

    Freemarker定义: 一款模板引擎 Freemarker是一个web图层组件不是web框架,解析服务端数据到页面 小例子: <#list 集合 as item> list标签对集合进 ...

  3. 阅读优秀的JAVA模板引擎Beetl的使用说明有感

    由于项目需要,对包括Beetl在内的JAVA模板引擎技术进行了学习 Beetl是由国人李家智(昵称闲大赋)开发的一款高性能JAVA模板引擎,对标产品是Freemaker 感慨于近几年国内开源项目的蓬勃 ...

  4. Java模板引擎之Freemarker 学习笔记 一

    什么是Freemarker Freemarker是模板引擎,不是Web框架,只是视图层的组件,官网是 https://freemarker.apache.org/ Freemarker原理 数据模型+ ...

  5. vue系列---Mustache.js模板引擎介绍及源码解析(十)

    mustache.js(3.0.0版本) 是一个javascript前端模板引擎.官方文档(https://github.com/janl/mustache.js) 根据官方介绍:Mustache可以 ...

  6. velocity模板引擎学习(2)-velocity tools 2.0

    使用velocity后,原来的很多标签无法使用了,必须借助velocity tools来完成,目前velocity tools最新版本是2.0,下面是velocity tools的一些注意事项: 1. ...

  7. Java模板引擎之freemarker简介

  8. SQL动态配置,动态解析SQL

    在项目中使用SQL动态配置的方式可以让后期的维护和发布后的修改变得更加方便,无论使用那种配置方式都离不开解析成最终真正能执行的SQL.下面代码就是一种比较简单的处理方法,SQL的参数以##括起来. 1 ...

  9. shell动态解析sql的binlog

    #!/usr/bin #设置数据库连接 conn='mysql -hhost -Pport -uusername -ppassword' #获取最新的binlog文件 logfile=$($conn ...

随机推荐

  1. vue加百度统计代码(亲测有效)

    申请百度统计后,会得到一段JS代码,需要插入到每个网页中去,在Vue.js项目首先想到的可能就是,把统计代码插入到index.html入口文件中,这样就全局插入,每个页面就都有了;这样做就涉及到一个问 ...

  2. 使用spring initialization创建SpringBoot项目

    https://blog.csdn.net/liutong123987/article/details/79385513 有很多方法可以快速创建Springboot项目,可以通过idea的spring ...

  3. linux 安装lnmp

    wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd ln ...

  4. Android播放器推荐:可以播放本地音乐、视频、在线播放音乐、视频、网络收音机等

    下载链接:http://www.eoeandroid.com/forum.php?mod=attachment&aid=MTAxNTczfGMyNjNkMzFlfDEzNzY1MzkwNTR8 ...

  5. java图片裁剪和java生成缩略图

    一.缩略图 在浏览相冊的时候.可能须要生成相应的缩略图. 直接上代码: public class ImageUtil { private Logger log = LoggerFactory.getL ...

  6. scala中隐式转换之隐式转换调用类中本不存在的方法

    /** * Created by root * Description : 隐式转换调用类中本不存在的方法 */ class Person(name : String){ def getPersonN ...

  7. flask实现简单的接收json返回json的接口

    结合http://docs.jinkan.org/docs/flask/quickstart.html#a-minimal-application这个flask文档实现 #!/usr/bin/pyth ...

  8. WINDOWS消息和窗口简介

    一.WINDOWS的消息和窗口简介:1.什么是windows在这里我就不介绍了,但是作为一个程序员我们要知道WINDOWS最重要的一个也是我们程序员常用的一个东西就是消息.窗口是以消息的形式输入的,窗 ...

  9. Windows驱动开发之线程与同步事件

    转载请注明来源: enjoy5512的博客 : http://blog.csdn.net/enjoy5512 GitHub : https://github.com/whu-enjoy .1. 使用系 ...

  10. MDU某产品OMCI模块代码质量现状分析

    说明 本文参考MDU系列某产品OMCI模块现有代码,提取若干实例以说明目前的代码质量,亦可作为甄别不良代码的参考. 本文旨在就事论事,而非否定前人(没有前人的努力也难有后人的进步).希望以史为鉴,不破 ...