天天看點

Mybatis實踐(一)類型轉換器

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

局部配置法(未完待更)