ibatis和是否支持union无关,ibatis只负责执行sql
然后把结果集放入对象中
然后把结果集放入对象中
解决方案 »
- 在Hibernate.cfg.xml文件中配置具有实例名的数据库,如何写connection.url
- Java异常 ArrayIndexOutOfBoundsException
- 关于学位的若干问题
- Mapbar经纬度加密
- 请教:用ireport做的报表,在ireport环境下能看到内容,放到web中显示空白
- weblogic 8.1 连接池泄漏问题
- java类调用问题
- 如何产生随机不重复数字?内容有些多,请熟悉的高手来
- java获得主机CPU占用率,磁盘空间等等指标,怎么做?
- ssh架构错误,请大家帮忙看看怎么回事?
- 一个Boolean值的问题...
- 用框架提交日期不能执行实体BEAN中的setter方法问题!(高手指教)
<select id="AAAA"
parameterClass="java.util.Map" resultMap="indexMap">
<dynamic prepend="">
<iterate property="libcode" conjunction="UNION">
<![CDATA[SELECT * FROM INDEX_$libcode[]$ WHERE]]>
<iterate property="searchKey" conjunction="OR">
<![CDATA[CONTEXT LIKE '%$searchKey[]$%']]>
</iterate>
</iterate>
</dynamic>
<![CDATA[ORDER BY rc_id]]>
</select>上面的libcode和searchKey都是Map的的key 里面的value是 2个数组当然也可以是list
这里动态的表名和union连接
有讨论的联系我.
的[] 可别忘了.不然ibaits会把当成String的(这句话是书上抄的.)
1.如果sql中没有大于或小于符合,可以不写CDATA,看上去累赘
2.libcode应该是不同的值吧,oracle的话,union改成union all效率更高,union会检查重复
3.dynamic不该放在那儿,
SELECT * FROM INDEX_$libcode[]$
<dynamic prepend="WHERE">
...
</dynamic>
或者<iterate ... open="WHERE">试试,尽量使得没有条件时也能执行4.可以的话searchKey[]尽量用##,比如'%'||#searchKey[]#||'%'
因为是老系统的数据库.设计的有问题.相同结果的表有很多 比如 talbe_1,table_2.......很多
要用户选择不同的表来检索才写成那样的. 写在外面就没法动态union了.2 要把union改成 union all3 # 和 $ 有啥区别呀.上面的配置换成#就报错.我也不懂.感谢呀!
如果字符串里有特殊字符也会转换$是字符串直接连接,from $tablename$ where col=#col#dynamic不是这样用的,比如where后面跟着一些条件,如果条件没有,dynamic能判断是否需要where你应该看看ibatis中文文档
SELECTID,NAME,AGE,SEX,MESSAGE FROM TABLE_0 WHERE MESSAGE LIKE '%1%' AND MESSAGE LIKE '%2%' AND MESSAGE
LIKE '%ibatis%' UNION ALL
SELECT ID,NAME,AGE,SEX,MESSAGE FROM TABLE_3 WHERE MESSAGE LIKE '%1%' AND MESSAGE LIKE '%2%' AND MESSAGE LIKE '%ibatis%' UNION ALL
SELECT ID,NAME,AGE,SEX,MESSAGE FROM TABLE_8 WHERE MESSAGE LIKE '%1%' AND MESSAGE LIKE '%2%' AND MESSAGE
LIKE '%ibatis%' ORDER BY ID