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
mybatis 在存储Integer、bigdecimal等java数据类型时,将0存成null的更多相关文章
- Java数据类型中String、Integer、int相互间的转换
1.Integer转换成int的方法 Integer i; int k = i.intValue(); 即Integer.intValue(); 2.int转换成Integer int i; Int ...
- (备忘)Java数据类型中String、Integer、int相互间的转换
1.Integer转换成int的方法 Integer i; int k = i.intValue();即Integer.intValue(); 2.int转换成Integer int i; Integ ...
- mysql-数据类型与java数据类型转化工具类
mysql和java对照表 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.Stri ...
- java.sql.Types,数据库字段类型,java数据类型的对应关系
以下转自:http://kummy.itpub.net/post/17165/172850 本文在原文基础上有增减. 本概述是从<JDBCTM Database Access from Java ...
- java数据类型,hibernate数据类型,标准sql数据类型之间的对应表
Hibernate API简介 其接口分为以下几类: l 提供访问数据库的操作的接口: l 用于配置Hibernate的接口: l 回调接口 l ...
- JDBC数据类型、Java数据类型、标准sql类型
本概述是从<JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference>这本书中摘引来的.JavaSoft ...
- MySQL和Java数据类型对应
Java MySQL数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.S ...
- Java数据类型与MySql数据类型对照表
这篇文章主要介绍了Java数据类型与MySql数据类型对照表,以表格形式分析了java与mysql对应数据类型,并简单讲述了数据类型的选择与使用方法,需要的朋友可以参考下 本文讲述了Java数据类型与 ...
- MySql数据类型和Java数据类型对应一览
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N ...
随机推荐
- Lingo 做线性规划 - Operation Management Applications
Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...
- ActiveMQ学习--002--Topic消息例子程序
一.非持久的Topic消息示例 注意 此种方式消费者只能接收到 消费者启动之后,发送者发送的消息. 发送者 package com.lhy.mq.helloworld; import java.uti ...
- 关于Spring的一点东西
Spring IoC 容器 容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁.Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件.这些对象被称为 Spr ...
- android listview实现点击某个item后使其显示在屏幕顶端
在该listview的点击事件中加入一下代码即可 listView.setSelectionFromTop(position, 0);
- 数字和表达式(python)
>>>2+2 4 >>>1/2#(注:3.0版本之前是这样的,整数除法) >>>1.0/2.0 0.5 >>>1.0/2 0.5 ...
- Python -- Gui编程 -- Tkinter的使用 -- 菜单与画布
1.菜单 tkMenu.py import tkinter root = tkinter.Tk() menu = tkinter.Menu(root) submenu = tkinter.Menu(m ...
- Web自动化 - 选择操作元素 2
文章转自 白月黑羽教Python 前面我们看到了根据 id.class属性.tag名 选择元素. 如果我们要选择的 元素 没有id.class 属性, 这时候我们通常可以通过 CSS selector ...
- Error : Weblogic Maven Plugin deployment WebLogic 12c
Error : Weblogic Maven Plugin deployment i want to use weblogic-maven-plugin in my maven project in ...
- [javaSE] 网络编程(TCP通信)
客户端A与服务端建立通信,服务端获取到客户端A的Socket对象,通过这个通路进行通信 客户端: 获取Socket对象,new出来,创建客户端的Socket服务,构造参数:Sting主机,int 端口 ...
- Java学习--Cookie 和session