/**
* Project Name:testDownload
* File Name:ReadXML.java
* Package Name:com.zsy.xml
* Date:2016-3-31上午08:37:47
* Copyright (c) 2016, syzhao@zsy.com All Rights Reserved.
*
*/
package com.zsy.xml;
import java.util.HashMap;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class ReadXML
{
private static ReadXML xml = new ReadXML();
/**
* getXml:(读取xml文件。获取document树). <br/>
* @author syzhao
* @param xmlPath xml数字
* @return Document
* @since JDK 1.6
*/
private static Document getXml(String xmlPath)
{
Document document = null;
SAXReader reader = new SAXReader();
try
{
document = reader.read(xml.getClass().getClassLoader().getResourceAsStream(xmlPath));
}
catch (DocumentException e)
{
System.out.println("获取xml " + xmlPath + " 文件失败!");
e.printStackTrace();
}
return document;
}
/**
* getSql:(获取xml中的sql语句). <br/>
* @author syzhao
* @param xmlPath xml路径
* @param xpathExpression 元素路径
* @return key:sql
* @since JDK 1.6
*/
public static HashMap<String, String> getSql(String xmlPath, String xpathExpression)
{
HashMap<String, String> map = new HashMap<String, String>();
List<Object> list = getXml(xmlPath).selectNodes(xpathExpression);
if (list != null && !list.isEmpty())
{
for (Object object : list)
{
Element element = (Element)object;
String sql = element.getTextTrim();
String key = element.attributeValue("key").trim();
map.put(key, sql);
}
}
return map;
}
}
xml里具体内容:
<?xml version="1.0" encoding="UTF-8"?>
<template>
<!--
查询语句
-->
<sqltemplate key="selectSql">
<![CDATA[
select * from emp
]]>
</sqltemplate>
<!--
更新语句
-->
<sqltemplate key="updateSql">
<![CDATA[
update emp set ename='zhangsan'
]]>
</sqltemplate>
<!--
删除语句
-->
<sqltemplate key="deleteSql">
<![CDATA[
delete from emp
]]>
</sqltemplate>
</template>
xml存放的地方及名称:
测试:
/**
* Project Name:testDownload
* File Name:Mian.java
* Package Name:com.zsy.xml
* Date:2016-3-31上午09:14:26
* Copyright (c) 2016, syzhao@zsy.com All Rights Reserved.
*
*/
package com.zsy.xml;
import java.util.HashMap;
public class Mian
{
/**
* main:(这里用一句话描述这个方法的作用). <br/>
* @author syzhao
* @param args
* @since JDK 1.6
*/
public static void main(String[] args)
{
HashMap<String, String> map = ReadXML.getSql("sqlxml/sqlxml.xml", "template/sqltemplate");
System.out.println("map size :" + map.size());
for (String key : map.keySet())
{
System.out.println("key:" + key);
System.out.println("value:" + map.get(key));
System.out.println("-------------------------分割线----------------------");
}
}
}
结果:
该代码用到了dom4j,,如果你测试的时候,报java.lang.ClassNotFoundException: org.jaxen.JaxenException,请把jaxen.jar 引入项目内,即可。
sql语句放到外部xml文件里,有利于根据需求动态修改。
文件最好在系统启动的时候就加载好,一般都是这么用的,,也就是缓存机制,,,,