您的位置:首页 > 其它

关于mybatis like

2016-07-08 11:48 225 查看
在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,改成如下



问题解决!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息