MyBatis 提供了一些内置的类型处理器,用于将 Java 类型与数据库类型之间进行映射。内置的类型处理器可以帮助开发者自动处理常见的数据类型转换,不需要手动指定类型。
以下是 MyBatis 内置的一些常见类型:
1. 基本数据类型和包装类型
Java 类型 | 数据库类型 | MyBatis 类型处理器 |
---|---|---|
Integer | INTEGER | IntegerTypeHandler |
Long | BIGINT | LongTypeHandler |
Double | DOUBLE | DoubleTypeHandler |
Float | FLOAT | FloatTypeHandler |
Short | SMALLINT | ShortTypeHandler |
Byte | TINYINT | ByteTypeHandler |
Boolean | BOOLEAN | BooleanTypeHandler |
Character | CHAR | CharacterTypeHandler |
String | VARCHAR , TEXT | StringTypeHandler |
BigDecimal | DECIMAL , NUMERIC | BigDecimalTypeHandler |
Date | DATE , TIMESTAMP | DateTypeHandler |
Time | TIME | TimeTypeHandler |
Timestamp | TIMESTAMP | TimestampTypeHandler |
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 和数据库类型映射。如果遇到特殊类型的转换需求,可以通过自定义类型处理器来满足需求。