* 修改人姓名 修改时间 版本号 描述 */ import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.util.HashMap; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; /** * * FreeMaker解析<br> * * @author 12010065 * */ public class FreeMakerParser { private static final String DEFAULT_TEMPLATE_KEY = "default_template_key"; private static final String DEFAULT_TEMPLATE_EXPRESSION = "default_template_expression"; private static final Configuration CONFIGURER = new Configuration(); static { CONFIGURER.setClassicCompatible(true); CONFIGURER.setSharedVariable("hash",new DalHash()); } /** * 配置SQL表达式缓存 */ private static Map<String, Template> templateCache = new HashMap<String, Template>(); /** * 分库表达式缓存 */ private static Map<String, Template> expressionCache = new HashMap<String, Template>(); public static String process(String expression, Map<String, Object> root) { StringReader reader = null; StringWriter out = null; Template template = null; try { if (expressionCache.get(expression) != null) { template = expressionCache.get(expression); } if (template == null) { template = createTemplate(DEFAULT_TEMPLATE_EXPRESSION, new StringReader(expression)); expressionCache.put(expression, template); } out = new StringWriter(); template.process(root, out); return out.toString(); } catch (Exception e) { throw new DalException(e); } finally { if (reader != null) { reader.close(); } try { if (out != null) { out.close(); } } catch (IOException e) { return null; } } } private static Template createTemplate(String templateKey, StringReader reader) throws IOException { Template template = new Template(DEFAULT_TEMPLATE_KEY, reader, CONFIGURER); template.setNumberFormat("#"); return template; } public static String process(Map<String, Object> root, String sql, String sqlId) { StringReader reader = null; StringWriter out = null; Template template = null; try { if (templateCache.get(sqlId) != null) { template = templateCache.get(sqlId); } if (template == null) { reader = new StringReader(sql); template = createTemplate(DEFAULT_TEMPLATE_KEY, reader); templateCache.put(sqlId, template); } out = new StringWriter(); template.process(root, out); return out.toString(); } catch (Exception e) { throw new DalException(e); } finally { if (reader != null) { reader.close(); } try { if (out != null) { out.close(); } } catch (IOException e) { return null; } } } }
public <T> List<T> queryForList(String sqlId, Map<String, Object> paramMap, RowMapper<T> rowMapper, int num, DBType dbType) { processTableRoute(paramMap); SqlBean sqlBean = getSQL(sqlId); String sql = FreeMakerParser.process(paramMap, sqlBean.getContent(), sqlId); NamedParameterJdbcTemplate template = getJdbcTemplate(paramMap, sqlBean); return template.query(generatePaginationSqlForRandom(sql, num, dbType), DalUtils.mapIfNull(paramMap), rowMapper);