Java教程

MyBatis之数据库默认值问题

本文主要是介绍MyBatis之数据库默认值问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Bug一览:

数据库设计:
注意: status字段默认值为0

Mapper层接收的值:
注意: status=null
Order{orderId=null, userId=10001, routeId=3, majorNumber=1, childrenNumber=0, price=200, status=null}

此时Mapper的SQL:

<insert id="insert" keyProperty="orderId" useGeneratedKeys="true">
    insert into order(user_id, route_id, status, major_number, children_number, price)
    values (#{userId}, #{routeId}, #{status}, #{majorNumber}, #{childrenNumber}, #{price})
</insert>

存在的问题:

可以看出,status字段的值是null,而不是我想要的默认值0,这不就是bug嘛

分析Bug

经过测试发现
1)给数据库设有默认值的字段传啥值就是啥值(如上文的null)
2)不给status字段传值,那么它就是默认值0了
总结:

解决Bug

解决思路就是 如果字段为空就不给status传值 是不是就想到了 MyBatis的动态SQL啊

<insert id="insert">
        insert into `order`
<trim prefix="(" suffix=")" suffixOverrides=",">
  <if test="userId != null">
    user_id,
  </if>
  <if test="routeId != null">
    route_id,
  </if>
  <if test="status != null">
    status,
  </if>
  <if test="majorNumber != null">
    major_number,
  </if>
  <if test="childrenNumber != null">
    children_number,
  </if>
  <if test="price != null">
    price,
  </if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
  <if test="userId != null">
    #{userId},
  </if>
  <if test="routeId != null">
    #{routeId},
  </if>
  <if test="status != null">
    #{status},
  </if>
  <if test="majorNumber != null">
    #{majorNumber},
  </if>
  <if test="childrenNumber != null">
    #{childrenNumber},
  </if>
  <if test="price != null">
    #{price},
  </if>
</trim>
</insert>
这篇关于MyBatis之数据库默认值问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!