• ibatis 2.3 问题


    这几天一直在看ibatis相关的东西。

    昨晚想写个demo例子试着玩一下,谁知道一玩就出了问题。

    配置文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- !DOCTYPE指定文件使用DTD进行校验 <!DOCTYPE 根元素 PUBLIC "注册//组织//类型 标签//定义 语言" "文档类型定义位置" -->
    <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
        "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
    <sqlMapConfig>
    
        <settings enhancementEnabled="true" maxTransactions="32"
            maxRequests="512" maxSessions="128" cacheModelsEnabled="true"
            lazyLoadingEnabled="false" statementCachingEnabled="false"
            useStatementNamespaces="true" />
        <!-- 引用JDBC属性的配置文件 -->
        <properties resource="com/mobel/entity/SqlMap.properties" />
    
        <!-- 使用JDBC的事务管理 -->
        <transactionManager type="JDBC">
            <!-- 数据源 -->
            <dataSource type="SIMPLE">
                <property name="JDBC.Driver" value="${driver}" />
                <property name="JDBC.ConnectionURL" value="${url}" />
                <property name="JDBC.Username" value="${username}" />
                <property name="JDBC.Password" value="${password}" />
            </dataSource>
        </transactionManager>
        <!-- 这里可以写多个实体的映射文件 -->
        <sqlMap resource="com/mobel/entity/Student.xml" />
    </sqlMapConfig>

    执行测试程序后,报错如下:

    Exception in thread "main" java.lang.ExceptionInInitializerError
        at com.mobel.test.TestIbatis.main(TestIbatis.java:18)
    Caused by: java.lang.RuntimeException: Error occurred.  Cause: com.ibatis.common
    .xml.NodeletException: Error parsing XML.  Cause: org.xml.sax.SAXParseException;
     lineNumber: 26; columnNumber: 16; 元素类型为 "sqlMapConfig" 的内容必须匹配 "(properties?,se
    ttings?,resultObjectFactory?,typeAlias*,typeHandler*,transactionManager?,sqlMap+
    )+"。
        at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigPa
    rser.java:120)
        at com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(SqlMapClientB
    uilder.java:63)

    看了下错误,开始理解为sqlMapConfig中的配置有问题,可是查了半天,也没发现配置文件哪里有问题。

    今天下载了所有相关的源代码进行调试,总是调式到properties节点时报异常,所以试着把properties节点删了再试,发现竟然成功了。

    突然想起是不是顺序有影响,然后调整下配置文件的顺序,将settings放在properties之后,问题解决。

    最终配置文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- !DOCTYPE指定文件使用DTD进行校验 <!DOCTYPE 根元素 PUBLIC "注册//组织//类型 标签//定义 语言" "文档类型定义位置" -->
    <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
        "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
    <sqlMapConfig>
    
        <!-- 引用JDBC属性的配置文件 -->
        <properties resource="com/mobel/entity/SqlMap.properties" />
        
        <settings enhancementEnabled="true" maxTransactions="32"
            maxRequests="512" maxSessions="128" cacheModelsEnabled="true"
            lazyLoadingEnabled="false" statementCachingEnabled="false"
            useStatementNamespaces="true" />
        
        <!-- 使用JDBC的事务管理 -->
        <transactionManager type="JDBC">
            <!-- 数据源 -->
            <dataSource type="SIMPLE">
                <property name="JDBC.Driver" value="${driver}" />
                <property name="JDBC.ConnectionURL" value="${url}" />
                <property name="JDBC.Username" value="${username}" />
                <property name="JDBC.Password" value="${password}" />
            </dataSource>
        </transactionManager>
        <!-- 这里可以写多个实体的映射文件 -->
        <sqlMap resource="com/mobel/entity/Student.xml" />
    </sqlMapConfig>

    总结:

      究其原因,是因为自己DTD语法不熟悉,没有完全理解sql-map-config-2.dtd的含义导致的。

         

    <!ELEMENT sqlMapConfig (properties?, settings?, resultObjectFactory?, typeAlias*, typeHandler*, transactionManager?, sqlMap+)+>
    <!ATTLIST sqlMapConfig
    xmlns:fo CDATA #IMPLIED
    >

    sqlMapConfig的定义是限定了顺序的啊!是sequence的,不是任意顺序的。这个以后要注意啦。。。

  • 相关阅读:
    windows下安装mysql-5.7.11-winx64
    memset库函数
    [转]全面解析《嵌入式程序员应该知道的16个问题》
    Cent OS 7 下 Redis 5.0.5 安装与配置
    SVN+TortoiseSVN的Windows版安装和配置
    工具和环境--目录(随时更新)
    Linux安装和配置Nodejs和NPM
    Windows10命令提示符窗口大小导致执行效率不同问题
    Windows安装Nodejs和npm以及创建项目
    WebStorm 2019.3.2安装与配置
  • 原文地址:https://www.cnblogs.com/zuoca/p/ibatis23_DTD.html
Copyright © 2020-2023  润新知