Mybatis --- 自定义类型转换

本文介绍了在Mybatis中自定义类型转换的必要性,详细讲解了如何创建自定义转换器,包括接口实现、代码示例以及配置方法。通过在Mapper XML文件中配置或使用注解两种方式来应用自定义转换,同时强调了在使用过程中应注意的配置和声明类型,以避免查询结果为null或类型不匹配的问题。
摘要由CSDN通过智能技术生成

Mybatis — 自定义类型转换

前言

在进行数据库增删改查的时候,因为实体类类型数据库类型不兼容,或者说Mybatis自带的类型转换不够用了,这时候就要自己手动操作了,最常见的就是素组的的操作,根据原有的进行扩展,这样就不用定义一个数组属性,就写一次转换方法。

接口

原生接口org.apache.ibatis.type.TypeHandler<T>

public interface TypeHandler<T> {
   
  /**
  用来设置查询参数
  */
  void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException;
  /**
  用来将查询结果转换成指定实体类,依旧是返回结果的列名
  */
  T getResult(ResultSet rs, String columnName) throws SQLException;
  /**
  用来将查询结果转换成指定实体类,依旧是返回结果列的顺序号
  */
  T getResult(ResultSet rs, int columnIndex) throws SQLException;
  /**
  用来将查询结果转换成指定实体类,依旧是返回结果列的顺序号,
  只是使用了不同的返回接收接口,写过原生jdbc的应该有印象
  */
  T getResult(CallableStatement cs, int columnIndex) throws SQLException;

}

也可以使用继承的方式扩展,我这里是直接继承 org.apache.ibatis.type.TypeReference<T>,这个可以省很多事情

public abstract class BaseTypeHandler<T> extends TypeReference<T> implements TypeHandler<T> {
   

  protected Configuration configuration;

  public void setConfiguration(Configuration c) {
   
    this.configuration = c;
  }

  public void setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
   
    if (parameter == null) {
   
      if (jdbcType == null) {
   
        throw new TypeException("JDBC requires that the JdbcType must be specified for all nullable parameters.");
      }
      try {
   
        ps.setNull(i, jdbcType.TYPE_CODE);
      } catch (SQLException e) {
   
        throw new TypeException("Error setting null for parameter #" + i + " with JdbcType " + jdbcType + " . " +
        		"Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. " +
        		"Cause: " + e, e);
      }
    } else {
   
      setNonNullParameter(ps, i, parameter, jdbcType);
    }
  }

  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Grey Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值