Mybatis 类型映射?
Mybatis 作为一个 ORM 框架,其中最重要的是能够将数据表映射到类,即操作类就相当于操作表。那么 Mybatis 是如何将类与数据表对应起来的?
- 类名 <-> 表名
- 类属性名 <-> 表字段名
- 类属性类型 <-> 表字段类型
前两点名字的对应比较好理解和配置使用。这篇文章主要讲的是第三点的实践:类型的映射关系设置。
Mybatis 支持的常用的基本类型转换
javaType | 数据库类型 | jdbcType |
---|---|---|
java.lang.String | varchar, char, text, ... | VARCHAR, CHAR, LONGVARCHAR |
java.lang.Long | bigint | BIGINT |
java.math.BigDecimal | numeric, decimal | NUMERIC, DECIMAL |
java.lang.Boolean | boolean, bit | BOOLEAN, BIT |
java.lang.Short | short | SHORT |
java.lang.Integer | int | INTEGER |
java.lang.Float | float, real | REAL |
java.lang.Double | double | DOUBLE |
java.lang.Byte | byte | BYTE |
java.lang.Byte[] | binary, varbinary, longvarbinary | BINARY, VARBINARY, LONGVARBINARY |
java.sql.Date | date | DATE |
java.sql.Time | time | TIME |
java.sql.Timestamp | timestamp | TIMESTAMP |
未列出的部分可参考类 org.apache.ibatis.type.JdbcType。
其他类型需要自定义类型转换器配置实现映射关系。
自定义类型转换器
首先需要创建类 XXXHandler,实现 TypeHandler<你需要转换的类> 接口的几个方法。
之后,需要告诉 Mybatis 自定义的映射关系,以下以一个枚举类以例:
全局配置法:
<configuration>
<typeHandlers>
<typeHandler handler="com.github.leannor.mybatis.handler.AccessHandler"
jdbcType="TINYINT" javaType="com.github.leannor.mos.enums.AccessEnum"/>
</typeHandlers>
</configuration>
public class AccessEnumHandler implements TypeHandler<AccessEnum> { ... }
全局注释法:
<configuration>
<typeHandlers>
<typeHandler handler="com.github.leannor.mybatis.handler.AccessHandler"/>
</typeHandlers>
</configuration>
@MappedJdbcTypes({JdbcType.TINYINT})
@MappedTypes(AccessEnum.class)
public class AccessEnumHandler implements TypeHandler<AccessEnum> { ... }