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

局部配置法(未完待更)

猜你喜欢

转载自yq.aliyun.com/articles/689731
今日推荐