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

本文介绍了解决ibatis中因多个ORM配置文件导致的statement ID冲突问题,通过引入命名空间来区分不同配置文件中的相同ID。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习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) 即可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值