Mybatis實踐(一)型別轉換器

lean.li發表於2019-02-04

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

區域性配置法(未完待更)


相關文章