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,让我找得好苦。特此提醒大家注意。

 

二、Ibatislike  `%ibatis%`的写法实现模糊查询。假设需要传入参数name,那么在xml配置文件中对name进行模糊查询的写法有三种:

1name like '%$name$%'

2name like '%' || #name# || '%'

3name like CONCAT('%', #name#, '%')

第一种方法就是运用了$符号的特殊意义来实现的,第二种方法中||则是xml配置文件中的字符串连接符,第三种方法中则是调用了mysql中的字符串连接函数来实现。

 

三、Ibatis中动态sql语句的配置,当我们不能确定传入的参数是否一定不为null或者空字符串“”,或者需要和特定的值进行比较的时候,我们就需要用到它的动态sql语句配置了。

<select id="getAllSign" parameterClass="sign" resultClass="sign">

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值