MyBatis中遇到的关于注解和<bind>标签的问题

int selCountByCondition(User user);

<select id="selCountByCondition" resultType="java.lang.Integer">
         select count(1) from tb_user
         <where>
             <if test="realname!=null and realname!=''">
                 <bind name="realname" value="'%' + realname + '%'" />
                 and realname like #{realname}
             </if>
             <if test="age!=null">
                 and age &gt;#{age}
             </if>
         </where>
</select>

- [DEBUG] ==>  Preparing: select count(1) from tb_user WHERE realname like ? and age >? 
- [DEBUG] ==> Parameters: %胡%(String), 15(Integer)
- [DEBUG] <==      Total: 1

分为三部分,第一部分是接口中的方法,第二部分是映射文件中的语句,第三部分是日志文件中的语句。这里执行是顺利的。

这里我修改成了带注解的参数也会发生和下面一模一样的情况。

这里是会发生错误但是不报错的情况。

 List<User> selByCondition(@Param("user") User user, @Param("index")int index, @Param("size")int size);

<select id="selByCondition" resultType="com.bjsxt.pojo.User">
        <include refid="base_sql"/>
        <where>
            <if test="user.age!=null">
                and age &gt; #{user.age}
            </if>
            <if test="user.realname!=null and user.realname!=''">
                <bind name="user.realname" value="'%'+user.realname+'%'"/>
                and realname like #{user.realname}
            </if>
        </where>
        limit #{index},#{size}
    </select>

- [DEBUG] ==>  Preparing: select id, username, password, realname, age, birthday, reg_time regTime from tb_user WHERE age > ? and realname like ? limit ?,? 
- [DEBUG] ==> Parameters: null, %胡%(String), 0(Integer), 5(Integer)
- [DEBUG] <==      Total: 0

这里也是分为三部分,第一部分是接口中的方法,第二部分是映射文件中的语句,第三部分是日志文件中的语句。

但是会丢失掉User中age的数据。下面是debug的状态

这里是日志文件查看。可以看到上面两次运行是不一样的地方,一次可以读取到,一次不可以读取到。

当我把bind标签去掉之后就可以顺利的读取到age的值了。

所以这里先暂时结合所学内容做猜测,加过注解之后的对象会被存放进map集合里面,bind标签里面的内容会从map里面将user取出来进行过加工之后在存放回去,所以会将之前的user覆盖掉。这里做了测试,不管bind标签在上还是在下都会使得age的值丢失,所以猜测if标签和bind标签之间存在一定的执行顺序,这个执行顺序不是按照位置来决定的。上面的user没有被覆盖掉是因为没有加注解,所以没有存放进入map集合里面。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值