Mybatis自定义typeHandler处理空数据

本文介绍如何通过自定义Mybatis的TypeHandler将数据库中的null值转换为空字符串,并展示了具体的实现代码及配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis自定义typeHandler处理空数据

Mybatis中支持自定义处理类对数据库返回为 null 的数据进行处理,记录如下

1.自定义一个数据处理类

  • 下面是一个处理字符串类型的数据处理类,将数据库中返回的 null 值转换为空字符串
package com.example;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * 将数据库返回的 null 值转为空字符串 ""
 * 继承BaseTypeHandler类,重写其中的方法
 * MappedTypes注解: 指定处理Java哪些种类的数据
 * MappedJdbcTypes注解: 指定处理数据库哪些种类的数据
 */
@MappedTypes({String.class})
@MappedJdbcTypes(JdbcType.VARCHAR)
public class MybatisStringHandler extends BaseTypeHandler<String> {
    /**
     * 处理入参
     * @param ps 预处理的SQL执行对象
     * @param i 字段下标
     * @param parameter 入参
     * @param jdbcType 字段在数据库中的类型
     */
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parameter);
    }
    /**
     * 处理数据库中返回的可能为空的数据,转为空字符串
     * @param rs 结果集
     * @param columnName 数据库返回数据字段名
     */
    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return rs.getString(columnName) == null ? "" : rs.getString(columnName);
    }
    /**
     * 处理数据库中返回的可能为空的数据,转为空字符串
     * @param rs 结果集
     * @param columnIndex 数据库返回数据字段下标
     */
    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return rs.getString(columnIndex) == null ? "" : rs.getString(columnIndex);
    }
    /**
     * 处理数据库中存储过程返回的可能为空的数据,转为空字符串
     * @param rs 结果集
     * @param columnIndex 数据库返回数据字段下标
     */
    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return cs.getString(columnIndex) == null ? "" : cs.getString(columnIndex);
    }
}

2.在mapper文件中使用

在创建 resultMap 结果映射时在相应字段的 typeHandler 属性指定即可

<?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.example.DemoMapper">
    <resultMap id="BaseResultMap" type="com.example.Demo">
        <id column="id" jdbcType="INTEGER" property="id" />
        <!-- 使用 typeHandler 属性指定即可 -->
        <result column="demo" jdbcType="VARCHAR" property="demo" typeHandler="com.example.MybatisStringHandler"/>
    </resultMap>
<mapper>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值