MyBatis 提供了一些内置的类型处理器,用于将 Java 类型与数据库类型之间进行映射。内置的类型处理器可以帮助开发者自动处理常见的数据类型转换,不需要手动指定类型。

以下是 MyBatis 内置的一些常见类型:

1. 基本数据类型和包装类型

Java 类型数据库类型MyBatis 类型处理器
IntegerINTEGERIntegerTypeHandler
LongBIGINTLongTypeHandler
DoubleDOUBLEDoubleTypeHandler
FloatFLOATFloatTypeHandler
ShortSMALLINTShortTypeHandler
ByteTINYINTByteTypeHandler
BooleanBOOLEANBooleanTypeHandler
CharacterCHARCharacterTypeHandler
StringVARCHAR, TEXTStringTypeHandler
BigDecimalDECIMAL, NUMERICBigDecimalTypeHandler
DateDATE, TIMESTAMPDateTypeHandler
TimeTIMETimeTypeHandler
TimestampTIMESTAMPTimestampTypeHandler

2. 日期和时间类型

MyBatis 对日期类型进行了特别的处理,支持以下类型:

  • Date:处理 java.sql.Date 类型,可以与 SQL 中的 DATE 类型相匹配。
  • Time:处理 java.sql.Time 类型,可以与 SQL 中的 TIME 类型相匹配。
  • Timestamp:处理 java.sql.Timestamp 类型,可以与 SQL 中的 TIMESTAMP 类型相匹配。
  • LocalDate, LocalDateTime, LocalTime:支持 Java 8 中的日期和时间 API。

3. 枚举类型

MyBatis 支持将 Java 枚举类型与数据库中的值进行映射。默认情况下,MyBatis 使用枚举的 name() 方法将枚举转换为字符串,或使用 ordinal() 方法转换为整数。

public enum Status {
    ACTIVE, INACTIVE
}
<resultMap id="userResultMap" type="User">
    <result column="status" property="status" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
</resultMap>

4. 自定义类型处理器

如果你有特殊的类型转换需求,MyBatis 允许你自定义类型处理器。自定义类型处理器需要实现 org.apache.ibatis.type.TypeHandler 接口。

public class CustomTypeHandler implements TypeHandler<CustomType> {
    @Override
    public void setParameter(PreparedStatement ps, int i, CustomType parameter, JdbcType jdbcType) throws SQLException {
        // 自定义逻辑
    }

    @Override
    public CustomType getResult(ResultSet rs, String columnName) throws SQLException {
        // 自定义逻辑
    }

    @Override
    public CustomType getResult(ResultSet rs, int columnIndex) throws SQLException {
        // 自定义逻辑
    }

    @Override
    public CustomType getResult(CallableStatement cs, int columnIndex) throws SQLException {
        // 自定义逻辑
    }
}

小结

MyBatis 提供了丰富的内置类型处理器,可以自动处理大多数常见的 Java 和数据库类型映射。如果遇到特殊类型的转换需求,可以通过自定义类型处理器来满足需求。