• mybatis中int类型的判断问题分析


    用mybatis进行一个修改操作的时候,int age 我并没没有给它赋值,执行完成修改后发现原有的age的值修改为0,

    先看看mapper.xml里面的sql

    <update id="updateUser" parameterType="u">
    update t_user
    set
    <if test="username!=null">
    username=#{username},
    </if>
    <if test="realname!=null">
    realname=#{realname},
    </if>
    <if test="password!=null">
    password=#{password},
    </if>
    <if test="age!=null ">age=#{age}</if>
    where userid=#{userid}
    </update>

    我没有传age值到对象当中,age是int类型  默认为0,假如age为空 我们还不想它修改原来的值得话需要在age后面添加判断条件 

    先看看出错之前的sql

    <update id="updateUser" parameterType="u">
    update t_user
    set
    <if test="username!=null">
    username=#{username},
    </if>
    <if test="realname!=null">
    realname=#{realname},
    </if>
    <if test="password!=null">
    password=#{password},
    </if>
    <if test="age!=null and age!=''">age=#{age}</if>

    where userid=#{userid}
    </update>

    运行测试程序报错提示

    报错### Cause: java.sql.SQLException: ORA-01747: user.table.column, table.column 或列说明无效

    原来没有写set标签

    <update id="updateUser" parameterType="u">
    update t_user
    <set>
    <if test="username!=null">
    username=#{username},
    </if>
    <if test="realname!=null">
    realname=#{realname},
    </if>
    <if test="password!=null">
    password=#{password},
    </if>
    <if test="age!=null and age!=''">age=#{age}</if>
    </set>
    where userid=#{userid}
    </update>

    这样写的修改成功,并且之前的值也不会修改成默认的值0

    假如一个int 类型的 a 它不能为空 但是它可以为0可以这样写

    <if test="a!=null and a!='' or a==0">

    a=#{a}

    </if>

     补充:

    我发现在有set节点包裹的if条件判断时可以这么写 直接判断age!=0即可,它原来的值也不会改变。

    <update id="updateUser" parameterType="u">
    update t_user
    <set>
    <if test="username!=null">
    username=#{username},
    </if>
    <if test="realname!=null">
    realname=#{realname},
    </if>
    <if test="password!=null">
    password=#{password},
    </if>
    <if test="age!=0">age=#{age}</if>
    </set>
    where userid=#{userid}
    </update>

    原创不易,如果这篇博文对你有所帮助,麻烦动动你发财的小手支持一下谢谢。

  • 相关阅读:
    二进制运算基础
    初识Tomcat系统架构
    MySQL InnoDB引擎锁的总结
    Java并发编程:并发容器之CopyOnWriteArrayList
    java类的加载机制
    Nginx实现tomcat集群进行负载均衡
    Java序列化对象为字符串并将字符串反序列化为对象
    数据库的四大特性及事务的隔离级别
    人性的弱点
    华为工作法摘抄笔记
  • 原文地址:https://www.cnblogs.com/flyfishing1991/p/14274701.html
Copyright © 2020-2023  润新知