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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值