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> { ... }