Mybatis实践(一)类型转换器

简介: Mybatis 类型映射?Mybatis 作为一个 ORM 框架,其中最重要的是能够将数据表映射到类,即操作类就相当于操作表。那么 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> { ... }

局部配置法(未完待更)

目录
相关文章
|
4月前
|
SQL Java 数据库连接
Mybatis源码分析系列之第三篇:Mybatis的操作类型对象
Mybatis源码分析系列之第三篇:Mybatis的操作类型对象
|
7月前
|
Java 数据库连接 mybatis
mybatis返回map类型数据空值字段不显示(三种解决方法)
mybatis返回map类型数据空值字段不显示(三种解决方法)
|
3月前
|
SQL Java 数据库连接
Mybatis之核心配置文件详解、默认类型别名、Mybatis获取参数值的两种方式
【1月更文挑战第3天】 一、核心配置文件详解 二、默认的类型别名 三、MyBatis的增删改查 四、MyBatis获取参数值的两种方式 1、单个字面量类型的参数 2、多个字面量类型的参数 3、map集合类型的参数 4、实体类类型的参数 5、使用@Param标识参数
62 2
Mybatis之核心配置文件详解、默认类型别名、Mybatis获取参数值的两种方式
|
4月前
|
存储 Java 数据库连接
MyBatis的类型处理器TypeHandler与自定义实现
MyBatis的类型处理器TypeHandler与自定义实现
162 0
|
1月前
|
SQL Java 数据库连接
Mybatis查询的时候BigDecimal类型的值查询失效的解决办法
Mybatis查询的时候BigDecimal类型的值查询失效的解决办法
|
2月前
|
Java 数据库连接 mybatis
Mybatis查找结果注入bean时出现类型转换错误
Mybatis查找结果注入bean时出现类型转换错误
11 0
|
3月前
|
SQL XML Java
mybatis元素类型为 "resultMap" 的内容必须匹配 "(constructor?,id *,result*,association报错解决
mybatis元素类型为 "resultMap" 的内容必须匹配 "(constructor?,id *,result*,association报错解决
49 0
|
8月前
|
SQL Java 数据库连接
mybatis查询数据时,返回类型设置的map,然后出现这个错误java.lang.NoSuchMethodException: java.util.Map.<init>
mybatis查询数据时,返回类型设置的map,然后出现这个错误java.lang.NoSuchMethodException: java.util.Map.<init>
105 0
|
4月前
|
SQL IDE Java
MyBatis【问题 01】mapper传入array\collection\list类型的参数时报BindingException:Parameter ‘xx‘ not found问题复现及解决
MyBatis【问题 01】mapper传入array\collection\list类型的参数时报BindingException:Parameter ‘xx‘ not found问题复现及解决
50 0
|
7月前
|
SQL Java 数据库连接
MyBatis 类型转换模块
MyBatis是一个持久层框架ORM框架,实现数据库中数据和Java对象中的属性的双向映射,那么不可避免的就会碰到类型转换的问题,在PreparedStatement为SQL语句绑定参数时,需要从Java类型转换为JDBC类型,而从结果集中获取数据时,则需要从JDBC类型转换为Java类型,所以本文来看下在MyBatis中是如何实现类型的转换的。
24 0