Mybatis 类型映射?
Mybatis 作为一个 https://baike.baidu.com/item/ORM 框架 https://baike.baidu.com/item/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> { ... }
局部配置法 (未完待更)
来源: https://yq.aliyun.com/articles/689731