Attribute "nameSpace" must be declared for element type "sqlMap".

在学习ibatis的时候遇到的异常

你可能写了多个orm配置文件,每个配置文件里都进行一些CRUD之类的操作,难免会遇到两个或者多个配置文件中的都有一个statement的id命名为 find***,

 

<statement id="findById" parameterClass="java.lang.Integer" resultMap="BookMap"> 

<statement id="findById" parameterClass="java..lang.Integer" resultMap="PubMap"> 

 

在使用getSqlMapClient().update("findById", id)的时候,findById到底是那个orm里的呢?

测试的过程中会出现异常:

Exception in thread "main" java.lang.RuntimeException: Error occurred.  Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'.  Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.  Cause: org.xml.sax.SAXParseException: Attribute "nameSpace" must be declared for element type "sqlMap".

这就引入了一个命名空间(Namespaces),为了以示区别,就在ibatis的核心配置文件中配置一个节点

 <sqlMapConfig>
 <settings useStatementNamespaces="true" lazyLoadingEnabled="true"/>

<sqlMap resource=".......

 

再在你的orm配置文件中将根节点修改为<sqlMap namespace="Book">

把测试语句改为getSqlMapClient().update("Book.findById", id) 即可。

你可能感兴趣的:(thread,exception,ibatis,orm,NameSpaces,Parsing)