#会判断类型,比如字符串,会自己判断并加引号 如果字符串里有特殊字符也会转换$是字符串直接连接,from $tablename$ where col=#col#dynamic不是这样用的,比如where后面跟着一些条件,如果条件没有,dynamic能判断是否需要where你应该看看ibatis中文文档
o .我需要的是下面这样的语句.所以这样写.并且实现了.哈哈 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
<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