读书人

ibatis 运用小结

发布时间: 2012-08-30 09:55:54 作者: rapoo

ibatis 使用小结

一、在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? destroyed FROM maildestroy WHERE username = 'abc ' ORDER BY ord1 ASC

通过上述比较之后,就不难看出:#符号的作用就是将传入的字符串参数前后自动加上’,传入的整形参数原封不动的放入到sql语句。

?$符号的作用就是将传入的参数原封不动的放入到sql语句中。

这里特别强调一下,在进行排序的时候,一定要是使用$符号,而不是#符号。如果使用#符号之后,生成的sql语句就是:

SELECT? destroyed FROM 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" parameterresultstyle="text-align: left; text-indent: 21pt; margin: 0cm 0cm 0pt;">SELECT * FROM sign

<dynamic prepend ="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,这两种情况在项目中都运用到了。

读书人网 >软件架构设计

热点推荐