You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改MyBatis默认IntegerTypeHandler解决int返回空异常

解决方案:自定义IntegerTypeHandler处理null返回-1

1. 实现自定义TypeHandler

创建MyConfigIntegerTypeHandler类,继承MyBatis的BaseTypeHandler<Integer>,重写核心方法处理null场景,返回-1替代:

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MyConfigIntegerTypeHandler extends BaseTypeHandler<Integer> {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Integer parameter, JdbcType jdbcType) throws SQLException {
        ps.setInt(i, parameter);
    }

    @Override
    public Integer getNullableResult(ResultSet rs, String columnName) throws SQLException {
        int value = rs.getInt(columnName);
        return rs.wasNull() ? -1 : value;
    }

    @Override
    public Integer getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        int value = rs.getInt(columnIndex);
        return rs.wasNull() ? -1 : value;
    }

    @Override
    public Integer getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        int value = cs.getInt(columnIndex);
        return cs.wasNull() ? -1 : value;
    }
}

2. 配置MyBatis启用自定义TypeHandler

提供两种配置方式,按需选择:

方式一:全局生效(所有int类型查询统一处理)

在MyBatis核心配置文件(如mybatis-config.xml)中添加类型处理器配置:

<configuration>
    <typeHandlers>
        <!-- 替换com.yourpackage为实际类所在包路径 -->
        <typeHandler handler="com.yourpackage.MyConfigIntegerTypeHandler" javaType="int"/>
    </typeHandlers>
</configuration>

方式二:局部生效(仅指定查询使用)

如果不想全局修改,可在目标Mapper的<select>标签中单独指定:

<select id="yourQueryMethod" resultType="int" typeHandler="com.yourpackage.MyConfigIntegerTypeHandler">
    SELECT your_int_column FROM your_table WHERE condition = #{param}
</select>

3. 验证效果

完成配置后,执行原查询逻辑,当无匹配结果时,MyBatis会通过自定义处理器返回-1,避免null转基本类型int的异常,且无需修改XXXMapper.java中的方法返回值定义。

注意:全局配置会将所有返回null的int类型结果转为-1,若部分查询有特殊逻辑,建议使用局部配置针对性处理。

内容的提问来源于stack exchange,提问作者buzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:10:30