iBatis的AutoResultMap 默认配置使用时候出现的问题

演示的sqlMap 配置文件,通过'$'和'*'的使用,达到动态映射Table到一个map的作用

<? xml version="1.0" encoding="UTF-8"  ?>
<! DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"  >

< select  id ="useAutoResultMapExample"  parameterClass ="map" >
USE $dbName$
SELECT*  FROM   $tableName$
</ select >
</ sqlMap >

也就是在IBatis里面配置一个statment,去执行多个查询,充分利用了map映射的特性.

去执行多个查询。

比如
select * from myexample
select * from mywork

使用"*" 而且没有用resultClass 指定返回

但是在默认配置下,在使用的时候的时候

2次以上传入不同的$dbName$,$tabeName$ 调用这个useAutoResultMapExample,

就要报java.sql.SQLException: Invalid column name错误

因为iBatis自己有 AutoResultMap的cache,尽管你传入的$tableName$不同,但是他总是

用第一个建立的AutoResultMap的cache去匹配以后的$tableName$当然有错误了

解决方法: 使用多个statment或者使用 remapResults="true" (为了效率他默认的是false)

以上由于效率问题,建议还是采用多个statement 映射到不同的model上面去,不建议生产系统也这么使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值