Posted on 2006-11-17 21:19
Dr.Water 閱讀(2264)
評論(0) 編輯 收藏 所屬分類:
Java 隨手貼
演示的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上面去,不建議生產系統也這么使用。