关于mybatis like

在mybatis 中like常见的写法为

 <if test="param.name != null and param.name !=''">
     and NAME LIKE CONCAT( #{param.name ,jdbcType=VARCHAR}, '%')
    </if>

或者

 <if test="param.name != null and param.name !=''">
     and NAME LIKE  #{param.name ,jdbcType=VARCHAR}||'%'
    </if>

最终翻译成的sql为 :

 and  NAME LIKE CONCAT( ?, '%')或者and  NAME LIKE ?||'%'

但这样的写法在oracle10g中,如果该sql含有order by 那么它不会走索引

所以推荐的写法是:

     <if test="param.name != null and param.name!=''">
         <bind name="sys_bind_tag_name" value="''+_parameter.getParam().getName()+ '%'" />
     and NAME LIKE #{sys_bind_tag_name,jdbcType=VARCHAR}
    </if>

悲剧的是。那么它会提示某个bean没有提供name的get方法.如果你把#改成$则正常..

下载mybatis 源代码。发现报错的地方

也就是说。它是从bean里面找这个属性。而不是从boundsql的addtionalParameter里面找


原来我的mybatis分页插件中。有这样一句


好吧。。这种写法。等于清空了bondsql的addtionalParameter,改成如下


问题解决!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值