zoukankan      html  css  js  c++  java
  • mybatis 在存储Integer、bigdecimal等java数据类型时,将0存成null

    我们的项目中,有关于金额的计算,所以,一般在java环境中我们使用bigdecimal来做运算和存储金额信息。数据库sqlServer2008用的float类型

    问题是,当我将金额赋值成0时,很意外的发现数据库存储的是null. 我的持久层框架用的mybatis。

    在查阅了一翻资料后发现,原来是我在判断金额类型时,一个不规范的错误导致的,直接上代码。

    --有问题代码 PS我的maypper文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.travesky.bluesky.dao.tkt.OrdTktDataDao">
    <!-- 对于sqlserver数据库浮点型数据如果传入null则会抛出字符串转数值异常,下面通过判断来解决 -->
    <!-- <if test="comm ==null or comm==''"> -->
    <!-- null, -->
    <!-- </if> -->
    <!-- <if test="comm !=null and comm!=''"> -->
    <!-- #{comm}, -->
    <!-- </if> -->
    <!-- 插入数据 -->
    <insert id="insertOrdTktData" parameterType="com.travesky.bluesky.model.tkt.OrdTktDataModel"
    useGeneratedKeys="true" keyProperty="tktdataid" >
    insert into T_BLUESKY_ORD_TKTDATA
    (

    comm
    )
    values(

    <!-- comm begin -->
    <if test="comm == null or comm=='' " >   --------就是这里,做了一个判断是否是空串的判断
    null,
    </if>
    <if test="comm !=null and or comm!=''">
    #{comm},
    </if>
    <!-- comm end -->

    )
    </insert>
    </mapper>

    -----------就是因为我做了一个空串的判断,导致mybatis会按照字符串来解析属性。这就尴尬了。首先既然是封装数据类型,不可能有空串的可能性,所以这里应该只判断是够为null就可以了。

    ----正确写法

    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
    <mapper namespace="com.travesky.bluesky.dao.tkt.OrdTktDataDao"> 

    <!-- 插入数据 --> 
    <insert id="insertOrdTktData" parameterType="com.travesky.bluesky.model.tkt.OrdTktDataModel"
    useGeneratedKeys="true" keyProperty="tktdataid" >
    insert into T_BLUESKY_ORD_TKTDATA
    (

    comm

    values(

    <!-- comm begin -->
    <if test="comm == null " >   --------就是这里,做了一个判断是否是空串的判断
    null,
    </if>
    <if test="comm !=null">
    #{comm},
    </if>
    <!-- comm end -->

    )
    </insert>
    </mapper>

    具体的详细问题分析,大家可以参考http://blog.csdn.net/qing_gee/article/details/50518795

  • 相关阅读:
    Linux nfs服务讲解
    Linux nfs服务介绍
    牛客网题目-数组中只出现1次的数字
    牛客网中矩阵中的路径
    求链表的第一个公共节点
    C++中STL中简单的Vector的实现
    牛客网栈的压入,和弹出序列
    C++智能指针
    CI Weekly #22 | flow.ci 新版 iOS 构建流程的 4 大变化
    CI Weekly #21 | iOS 持续集成快速入门指南
  • 原文地址:https://www.cnblogs.com/ANCAN-RAY/p/7084074.html
Copyright © 2011-2022 走看看