DOM4J解析SqlMapper文件(Maven工程)

DOM4J解析xml文件

一、引入DOM4J的Maven依赖

dom4j依赖jaxen,要完成xml的解析,这两个坐标都需要导入。

<dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
    </dependency>
    <dependency>
      <groupId>jaxen</groupId>
      <artifactId>jaxen</artifactId>
      <version>1.1.1</version>
    </dependency>

如果是高版本的dom4j的话只引入以下坐标即可。

<dependency>
      <groupId>org.dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>2.0.0</version>
    </dependency>
二、编写测试代码解析xml文件

这是测试用的userDao.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<mapper namespace = "com.test.dao.UserDao">
    <select id = "selectList" parameterType = "java.lang.String" resultType = "com.test.pojo.User">
        select * from t_user where id = #{id};
    </select>
</mapper>

用Java代码解析此xml文件(如需复制粘贴的话注意要解析的xml文件名为userDao.xml,文件路径是src/main/resources/userDao.xml)

public void test2()throws Exception{
        //命名空间接口名
        String interfaceName = null;
        //select标签id值
        String idValue = null;
        //select标签参数值
        String parameterVal = null;
        //select标签返回值类型
        String retType = null;
        //select标签的sql值
        String sql = null;
        //使用缓冲流读取配置文件,获取根节点
        Element rootElement = new SAXReader().read(new BufferedReader(new InputStreamReader(new FileInputStream("src/main/resources/userDao.xml")))).getRootElement();
        String namespace = rootElement.attribute(0).getName();
        //如果是命名空间,取出类的全限定名
        if("namespace".equals(namespace)){
            interfaceName = rootElement.attribute(0).getValue();
        }
        Iterator<Element> rootIterator = rootElement.elementIterator();
        while (rootIterator.hasNext()) {
            Element element = rootIterator.next();
            String elementName = element.getName();
            //如果是select标签就给id,param,resultType赋值
            if("select".equals(elementName)){
                //将标签体内容赋值给sql
                sql = element.getStringValue().trim();
                //获取select标签属性集合
                List<Attribute> attributes = element.attributes();
                for (Attribute attribute : attributes) {
                    //获取属性名
                    String attributeName = attribute.getName();
                    if("id".equals(attributeName)){
                        idValue = interfaceName + "." + attribute.getValue();
                    }
                    if("parameterType".equals(attributeName)){
                        parameterVal = attribute.getValue();
                    }
                    if("resultType".equals(attributeName)){
                        retType = attribute.getValue();
                    }
                }
            }
        }
        System.out.println("命名空间接口名:" + interfaceName);
        System.out.println("id值:" + idValue);
        System.out.println("参数类型:" + parameterVal);
        System.out.println("返回值类型:" + retType);
        System.out.println("sql语句:" + sql);
    }

运行结果如下:
在这里插入图片描述

三、对DOM4J部分方法使用的简要说明
  • SAXReader类的read()方法:读取要解析的xml文件,此方法需要传的参数可以是java.io.File也可以是java.io.InputStream,还可以是java.io.Reader本文中使用的是传递InputStream的实现类.
  • Element类是标签(包含标签体和属性以及属性值)
  • Element类的attribute()方法可以传递一个索引,当只有一个标签(不包含子标签)的时候,index为0是就代表是自身标签,attribute()方法的返回值是Attribute类型,这个类型是表示标签中的属性以及属性值
  • Attribute类中的getName()方法是获取标签的属性名,getValue()方法是获取标签的属性值
  • Element类中的attributes()方法返回值是一个List集合,存储的是Attribute类型的引用,这个方法适用于标签中的属性值为多个时使用
  • Element类中的elementIterator()方法的返回值是一个遍历其子节点的迭代器(和集合迭代器一样)
  • Element类中的getStringValue()方法是获取标签体的内容,比如示例代码中获取的sql语句。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值