DBUtils学习----QueryLoader类
来源:互联网 发布:戚薇淘宝店不开了吗 编辑:程序博客网 时间:2024/06/13 23:33
负责将SQL语句注册到内存中,并保证不会重复注册相同SQL语句
package org.apache.commons.dbutils;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.Map;import java.util.Properties;import java.util.regex.Pattern;/** * QueryLoader 是一系列查询的注册表,这样就不会将相同查询的多个副本加载到内存中 * 这个实现加载带有查询名称(别名)到SQL语句映射的properties属性文件 * 这个类是线程安全的 */public class QueryLoader { /** * 该类的单例 */ private static final QueryLoader instance = new QueryLoader(); /** * 匹配扩展名为 xml 的文件 */ private static final Pattern dotXml = Pattern.compile(".+\\.[xX][mM][lL]"); /** * 返回该类的一个实例 */ public static QueryLoader instance() { return instance; } /** * 外层Map的key是存放文件的路径,而value是内层的Map,内层Map存放每一条SQL语句的key和value */ private final Map<String, Map<String, String>> queries = new HashMap<String, Map<String, String>>(); /** * QueryLoader 的唯一类的 protected 构造函数,不能使用 new 来实例化 */ protected QueryLoader() { super(); } /** * 加载查询名称到SQL语句的映射 * 这些映射会被缓存,因此后续请求从相同的路径加载查询将返回缓存的映射 * 加载的属性文件可以是面向行的,也可以是 XML 格式的 * XML格式的属性文件必须使用 *.xml 文件扩展名 * * path:类加载器将用于查找文件的路径 * 文件访问出错抛出 IOException 异常 * 如果类加载器不能在给定的路径找到文件,则抛出 IllegalArgumentException 异常 * XML 属性文件无效则抛出 java.util.InvalidPropertiesFormatException 异常 * 返回 查询名称到SQL语句的映射 */ public synchronized Map<String, String> load(String path) throws IOException { // 试着到成员属性queries中取 Map<String, String> queryMap = this.queries.get(path); //判断是否已经存在 if (queryMap == null) { queryMap = this.loadQueries(path);// 使用默认的实现将SQL语句加载到Map中 this.queries.put(path, queryMap);// 放入queries中 } return queryMap; } protected Map<String, String> loadQueries(String path) throws IOException { // 将 classpath 路径下的资源文件读入到输入流对象中。路径字符串格式应该以"/"打头 InputStream in = getClass().getResourceAsStream(path); if (in == null) { throw new IllegalArgumentException(path + " not found."); } Properties props = new Properties(); try { if (dotXml.matcher(path).matches()) { props.loadFromXML(in); } else { props.load(in); } } finally { in.close(); } // 将Properties对象直接拷贝给HashMap,为了更好的性能保证 @SuppressWarnings({ "rawtypes", "unchecked" }) HashMap<String, String> hashMap = new HashMap(props);// loadQueries()的每一次调用都会创建出一个新的HashMap对象 return hashMap; } /** * 从缓存中删除给定路径的查询 */ public synchronized void unload(String path) { this.queries.remove(path); }}
使用:
@Test public void testQueryLoader() { Pattern dotXml = Pattern.compile(".+\\.[xX][mM][lL]"); String path = "E:\\t00ls\\Ditto\\Language\\Danish.xml"; System.out.println(dotXml.matcher(path).matches()); try { Map<String, String> map = QueryLoader.instance().load("/sql.properties"); System.out.println(map.get("JDBC.QUERY_STRING")); } catch (IOException e) { e.printStackTrace(); } }
sql.properties
JDBC.QUERY_STRING=SELECT * FROM persons WHERE id = ?
private static final Pattern dotXml = Pattern.compile(".+\\.[xX][mM][lL]");
阅读全文
1 0
- DBUtils学习----QueryLoader类
- Commons DbUtils QueryLoader查询Map缓存
- java : apache commons-dbutils QueryLoader 例子
- DbUtils学习----DbUtils类
- DBUtils学习----QueryRunner类
- DBUtils学习----BeanProcessor类
- DbUtils学习
- DBUtils学习
- DBUtils学习
- DBUtils学习笔记一DbUtils
- 零基础学习DBUtils--DBUtils基础知识小结
- apache commons DbUtils学习
- DBUtils学习(一)
- DBUtils学习(二)
- 【DButils学习之】总结
- DbUtils学习(二)
- DbUtils学习(一)
- DBUtils学习总结
- qmake手册
- 【非技术面试】31道,了解面试管的心理,抓住机会,招招致命!!!
- JAVA数组
- 挂载
- 前端笔记 jQuery 属性操作
- DBUtils学习----QueryLoader类
- Android7.0 FileUriExposedException
- 数据库设计原则二
- 控制执行流程
- 小白系列---遍历器iterator
- SPSS数据分析流程
- 判断arr是不是数组
- CC2541 BLE源码阅读知识积累之外设从机Peripheral工作模式
- 53. Maximum Subarray