sql语句放到外部xml文件里,读取操作

来源:互联网 发布:渠道店面管理专员知乎 编辑:程序博客网 时间:2024/06/05 04:06
/*** Project Name:testDownload* File Name:ReadXML.java* Package Name:com.iflytek.xml* Date:2016-3-31上午08:37:47* Copyright (c) 2016, syzhao@iflytek.com All Rights Reserved.**/package com.iflytek.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.iflytek.xml* Date:2016-3-31上午09:14:26* Copyright (c) 2016, syzhao@iflytek.com All Rights Reserved.**/package com.iflytek.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文件里,有利于根据需求动态修改。

 

文件最好在系统启动的时候就加载好,一般都是这么用的,,也就是缓存机制,,,,

0 0
原创粉丝点击