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

  • 相关阅读:
    Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
    练oj时的小技巧(大多都在oj记录里,这是被忘记的部分)
    HDU 3032 (SG打表找规律)
    SG 大法(Sprague-Grundy函数)
    基于Linux的MySQL基本操作
    java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_password‘.解决方法
    手把手教你安装和配置MYSQL数据库
    理解Python闭包,这应该是最好的例子
    SQL基础
    MySQL令人咋舌的隐式转换
  • 原文地址:https://www.cnblogs.com/ANCAN-RAY/p/7084074.html
Copyright © 2011-2022 走看看