一、在ibatis的配置文件中,#,$等表示的意义不同。
举例来说明他们的应用:
DAO层代码赋值为:username=”abc” sortField=”ord1” ascending=”ASC”
<select id="getDestroyIdListLimit"parameterClass="java.util.Map" resultClass="String">
SELECT destroyId
FROM maildestroy
WHERE username = #username#
ORDER BY $sortField$ $ascending$
</select>
这样配置之后,最终在数据库执行的语句为:
SELECT destroyedFROM maildestroy WHERE username = 'abc'ORDER BY ord1 ASC
通过上述比较之后,就不难看出:#符号的作用就是将传入的字符串参数前后自动加上’,传入的整形参数原封不动的放入到sql语句。
$符号的作用就是将传入的参数原封不动的放入到sql语句中。
这里特别强调一下,在进行排序的时候,一定要是使用$符号,而不是#符号。如果使用#符号之后,生成的sql语句就是:
SELECT destroyedFROM maildestroy WHERE username = 'abc'ORDER BY 'ord1 ''ASC '
上述语句在执行的时候是不会报错的,但是此处的排序就会失效。因为这个问题造成的bug,相当隐蔽的bug。
二、Ibatis中like `%ibatis%`的写法实现模糊查询。
假设需要传入参数name,那么在xml配置文件中对name进行模糊查询的写法有三种:
1、name like '%$name$%'
2、name like '%' || #name# || '%'
3、name like CONCAT('%', #name#, '%')
第一种方法就是运用了$符号的特殊意义来实现的,第二种方法中||则是xml配置文件中的字符串连接符,第三种方法中则是调用了mysql中的字符串连接函数来实现。
三、Ibatis中动态sql语句的配置,当我们不能确定传入的参数是否一定不为null或者空字符串“”,或者需要和特定的值进行比较的时候,我们就需要用到它的动态sql语句配置了。
<select id="getAllSign" parameterClass="sign"resultClass="sign">
SELECT * FROM sign
<dynamicprepend="WHERE">
<isNotEqual prepend=""property="isForce" compareValue="-1">
isForce=#isForce#
</isNotEqual>
</dynamic>
</select>
此处prepend表示:在动态语句之前,需要填写的字符串,此处是WHERE.
iBATIS动态查询几个常用属性
<isPropertyAvailable > 属性是存在
<isNotPropertyAvailable > 属性不存在
<isNull > 属性值是null
<isEmpty > 判断Collection.size < 1 或String.length()<1
<isEqual> 等于
<isNotEqual > 不等于
<isGreaterThan > 大于
<isGreaterEqual > 大于等于
< isLessThan> 小于
<isLessEqual > 小于等于
在此处需要特别提出的是:传入的参数可以为自定义的对象,如这里的sign,也可以是java.util.Map,这两种情况在项目中都运用到了。