`

MySQL bigint types and iBATIS对ibatis关于BigInteger不支持的自定义处理方法

阅读更多
MySQL bigint types and iBATIS

One nuance I recently ran into while using iBATIS was inserting data into MySQL bigint unsigned columns. iBATIS doesn’t seem to have a way to handle BigInteger data types and throws an exception when attempting to do an insert. Fetching data out seemed to work OK because if iBATIS doesn’t know how to handle a certain type it just returns a java.lang.Object. The way to go about inserting BigInteger types is to set up a type handler. Here’s an example type handler for BigInteger types:

package org.qnot.util;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.SQLException;
import java.sql.Types;

import com.ibatis.sqlmap.client.extensions.ParameterSetter;
import com.ibatis.sqlmap.client.extensions.ResultGetter;
import com.ibatis.sqlmap.client.extensions.TypeHandlerCallback;

public class BigIntegerTypeHandler implements TypeHandlerCallback {

    public Object getResult(ResultGetter getter) throws SQLException {
        if(getter.wasNull()) {
            return null;
        }

        Object o = getter.getObject();
        if(o instanceof BigDecimal) {
            BigDecimal bd = (BigDecimal)o;
            return bd.toBigInteger();
        } else if(o instanceof BigInteger) {
            return (BigInteger)o;
        } else {
            return o;
        }
    }

    public void setParameter(ParameterSetter setter, Object parameter)
            throws SQLException {
        if (parameter == null) {
            setter.setNull(Types.BIGINT);
        } else {
            BigInteger i = (BigInteger) parameter;
            setter.setBigDecimal(new BigDecimal(i));
        }
    }

    public Object valueOf(String s) {
        return s;
    }
}
Then all you have to do is register the type handler in your sqlmap-config.xml file like so:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
    "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
    <settings useStatementNamespaces="true" />
    <typeHandler javaType="java.math.BigInteger"
                 callback="org.qnot.util.BigIntegerTypeHandler"/>
    <sqlMap resource="sql/example.xml"/>
</sqlMapConfig>
分享到:
评论

相关推荐

    java练习_大数运算_BigInteger.pdf

    Java大数运算 BigInteger 类的方法调用 正如我们在 Java 中处理大数运算时,需要使用 BigInteger 类来实现,这是因为 Java 的基本数据类型无法存储非常大的数字。BigInteger 类提供了几个重要的方法来进行大数运算...

    OC之-BigInteger

    在iOS开发中,Objective-C(OC)虽然原生支持了`NSDecimalNumber`类来处理高精度的数值计算,但当面对需要进行极大数值运算时,`NSDecimalNumber`可能会显得力不从心。这时,我们可以借鉴Java中的`BigInteger`类,...

    bigint.ts:BigInteger.js包装器

    `bigint.ts`是一个针对`BigInteger.js`库的TypeScript封装,由Tom Wu开发的`BigInteger.js`是一个广泛使用的JavaScript库,用于处理大整数运算,它弥补了JavaScript原生数据类型在处理超过JavaScript最大安全整数...

    超长大整数四则运算BigInt加减乘除

    大整数四则运算 BigInt 加减乘除 括号 优先级,Python支持无限精度的运行,Java有BigInteger类,但是对C和C++就只能自己实现,这是一个带加减乘除运算的实现。

    Bigint大整数类

    在编程领域,尤其是在处理大规模数据或数学计算时,标准整型数据类型(如int, long, long long)可能不足以表示非常大的数值。为了解决这个问题,程序员通常会使用专门的大整数类(如本例中的"Bigint")。Bigint大...

    mysql雪花算法生成唯一整型ID主键的实现方法

    MySQL 雪花算法生成唯一整型ID主键的实现主要针对大数据环境下,需要大量生成全局唯一ID的需求。雪花算法是一种分布式ID生成策略,由Twitter开源,其设计目标是在分布式系统中生成具有全局唯一性、有序性和高并发性...

    biginteger

    在编程领域,大整数(BigInteger)是一种能够处理超过普通整型变量范围的数值的数据类型。在Java中,BigInteger类提供了这种功能,它允许我们进行任意精度的算术运算,包括加减乘除、模运算以及位操作。而根据题目...

    mysql数据库转瀚高数据库所需要的函数列表

    1、mysql数据库转国产化瀚高数据库; 2、有些函数在瀚高数据库中不存在,需要添加自定义函数。

    C++有符号大整数类型bigint

    本篇将详细探讨如何自定义一个有符号大整数类型`bigint`,以及其相关的设计与实现策略。 首先,我们要理解`bigint`的基本概念。`bigint`是一种可以存储任意大小整数的数据类型,它通常基于数组或链表结构来存储多位...

    MySql数据类型,非常详细!

    以下是对MySQL数据类型的详细阐述。 1. 整数类型: - TINYINT:占用1字节,取值范围-128到127,或无符号0到255。 - SMALLINT:占用2字节,取值范围-32768到32767,或无符号0到65535。 - MEDIUMINT:占用3字节,...

    Oracle的表结构转成Mysql的表结构

    - **不支持的功能**:此函数目前不支持Oracle中的分区、函数索引、位图索引等特殊索引定义、自定义数据类型、ROWID、RAW等特殊数据类型、外键以及自定义约束。 - **数据类型转换**:Oracle中的`DATE`和`TIMESTAMP`...

    C++ 数据结构 BigInt 大数

    在C++中,标准库并没有内置大数支持,因此需要自定义数据结构来实现这种功能。"BigInt"类通常用于存储和操作任意长度的整数,这对于计算、密码学、数学算法和其他需要大整数运算的场景非常有用。 `BigInt`类的基本...

    ipv6的ip地址转biginteger数字

    ipv6的ip地址转biginteger数字 直接能够测试

    Java数据类型和MySql数据类型对应一览

    在本文中,我们将对 Java 数据类型和 MySql 数据类型进行对应一览,帮助开发者更好地理解和使用这两种类型。 字符串类型 在 Java 中,字符串类型对应的是 java.lang.String 类型。在 MySql 中,字符串类型对应的是...

    对比MySQL中int、char以及varchar的性能

    这主要是因为MySQL对整数类型有更优化的处理机制,能够更快地处理数值计算。然而,无论是char(c8)、varchar(s8)还是它们的4字节版本,它们之间的性能差距并不明显,这表明在全表扫描的情况下,数据的长度对查询速度...

    关于MySQL 时间类型 datetime、bigint、timestamp,你用哪个?

    ### MySQL时间类型详解:datetime、bigint、timestamp 在MySQL中,根据不同的应用场景和需求,可以选择多种方式来存储日期和时间信息。本篇文章将详细介绍三种常用的时间类型:`datetime`、`bigint` 和 `timestamp`...

    BigInteger BigDecimal 使用

    在Java编程语言中,`BigInteger`和`BigDecimal`是两个重要的类,用于处理大整数和高精度浮点数运算。这两个类属于`java.math`包,为开发者提供了超越普通`int`、`long`以及`float`和`double`类型的数值计算能力。 `...

    bigint-10-2-src

    在IT领域,大数计算(BigInt)是一种处理超出普通整型数据类型范围的极大整数的技术。BigInt主要用于解决计算机科学中的数学问题,特别是在密码学、分布式计算、金融计算以及科学计算等领域。`bigint-10-2-src`这个...

Global site tag (gtag.js) - Google Analytics