Mybatis配置文件之<typeHandlers>元素解析

本文详细介绍了Mybatis中的<typeHandlers>元素,包括系统定义的typeHandler、自定义typeHandler的创建与配置,以及枚举类型的typeHandler使用,强调了自定义typeHandler的必要性和实现方式。
摘要由CSDN通过智能技术生成

Mybatis配置文件之元素解析

1. 概述

mybatis在预处理语句(PreparedStatement)中设置一个参数或者从结果集中(ResultSet)中取出一个值时,都会用注册了的typeHandler进行处理。
由于数据库厂商的不同,所以厂商设置的参数可能也不同,同时数据库也可以自定义数据类型,typeHandler允许我们根据项目的需要自定义设置Java传递到数据库的参数中,或者从数据库读取数据,我们也需要进行特殊的处理,这些都可以在在定义的typeHandler中进行处理,尤其是在使用枚举的时候我们常常需要使用typeHandler进行转换。
typeHandler与别名一样也分为mybatis系统定义的和用户自定义两种。通常情况下使用mybatis系统定义的就可以实现大部分功能,typeHandler常用的配置为Java类型(javaType)、JDBC类型(jdbcType)。typeHandler的作用是对参数或者结果进行两种类型的转换。

2. 系统定义typeHandler

mybatis系统内部定义了一系列的typeHandler,我们跟踪源代码可以看到,他们是在org.apache.ibatis.type.TypeHandlerRegistry中,如下:

public TypeHandlerRegistry() {
    register(Boolean.class, new BooleanTypeHandler());
    register(boolean.class, new BooleanTypeHandler());
    register(JdbcType.BOOLEAN, new BooleanTypeHandler());
    register(JdbcType.BIT, new BooleanTypeHandler());

    register(Byte.class, new ByteTypeHandler());
    register(byte.class, new ByteTypeHandler());
    register(JdbcType.TINYINT, new ByteTypeHandler());

    register(Short.class, new ShortTypeHandler());
    register(short.class, new ShortTypeHandler());
    register(JdbcType.SMALLINT, new ShortTypeHandler());

    register(Integer.class, new IntegerTypeHandler());
    register(int.class, new IntegerTypeHandler());
    register(JdbcType.INTEGER, new IntegerTypeHandler());

    register(Long.class, new LongTypeHandler());
    register(long.class, new LongTypeHandler());

    register(Float.class, new FloatTypeHandler());
    register(float.class, new FloatTypeHandler());
    register(JdbcType.FLOAT, new FloatTypeHandler());

    register(Double.class, new DoubleTypeHandler());
    register(double.class, new DoubleTypeHandler());
    register(JdbcType.DOUBLE, new DoubleTypeHandler());

    register(Reader.class, new ClobReaderTypeHandler());
    register(String.class, new StringTypeHandler());
    register(String.class, JdbcType.CHAR, new StringTypeHandler());
    register(String.class, JdbcType.CLOB, new ClobTypeHandler());
    register(String.class, JdbcType.VARCHAR, new StringTypeHandler());
    register(String.class, JdbcType.LONGVARCHAR, new ClobTypeHandler());
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值