?>
like在不同的数据库好像用法都不一样
select * from table where colName like '%' || #value# || '%'不起作用。按照官方的解释,如果你想要的查询是:
select * from foo where value like 'x%'
那么你在 xml 映射文件中可能会写:
select * from foo where value like #parm#
但是经过 ibatis 转换以后会变成:
select * from foo where value like ?
所以你就什么也查不到了。怎么解决呢?有两种方法,一是自己处理参数 "x%",也就是自己先在程序里面对传入的参数包裹一下,就像这样:
String param = "%" + param + "%"
然后再把 param 传给 ibatis,这方法确实有效,但会使你很容易搞不清楚什么时候在哪里加了 like 了。第二种方法就是写成:
select * from foo where value like #parm# || '%'(对我不起作用)
要使它对大小写不敏感,还可以写成:
select * from foo where upper(value) like '%%' || upper(#parm#) || '%%'(没有实验过)
总之,目前还没有比较满意的解决 like,大家有什么好办法吗?
最终我使用这样的方法解决了
select * from foo where value like '%$parm$%'
看我写的:
<!-- 按用户角色列表和相应的条件查询员工 -->
<select id="getEmployeeByWhere" resultMap="EmployeeInfoResult">
SELECT DISTINCT e.* FROM employeeinfo AS e,roleteam r,team
t,department d,organization o where r.tid = t.tid and e.tid =
t.tid and t.deptid = d.deptid and d.oid = o.oid
<dynamic prepend="and">
<iterate property="roles" prepend="and" conjunction="or" open="("
close=")">
roleId = #roles[]#
</iterate>
<isNotEqual prepend="and" property="deptid"
compareValue="0">
d.deptid = #deptid#
</isNotEqual>
<isNotEqual prepend="and" property="oid" compareValue="0">
o.oid = #oid#
</isNotEqual>
<isNotEqual prepend="and" property="tid" compareValue="0">
t.tid = #tid#
</isNotEqual>
<isNotNull prepend="and" property="cnname">
e.cnname like '%$cnname$%'
</isNotNull>
</dynamic>
order by e.id desc
</select>