MyBatis 教程

MyBatis 配置 typeHandlers 标签

无论是 MyBatis 在预处理语句中设置一个参数,还是从结果集中取出一个值时,类型处理器被用来将获取的值以合适的方式转换成 Java 类型。

下面这个表格描述了默认的类型处理器:

类型处理器Java 类型JDBC 类型
BooleanTypeHandlerBoolean,boolean任何兼容的布尔值
ByteTypeHandlerByte,byte任何兼容的数字或字节类型
ShortTypeHandlerShort,short任何兼容的数字或短整型
IntegerTypeHandlerInteger,int任何兼容的数字和整型
LongTypeHandlerLong,long任何兼容的数字或长整型
FloatTypeHandlerFloat,float任何兼容的数字或单精度浮点型
DoubleTypeHandlerDouble,double任何兼容的数字或双精度浮点型
BigDecimalTypeHandlerBigDecimal任何兼容的数字或十进制小数类型
StringTypeHandlerStringCHAR 和 VARCHAR 类型
ClobTypeHandlerStringCLOB 和 LONGVARCHAR 类型
NStringTypeHandlerStringNVARCHAR 和 NCHAR 类型
NClobTypeHandlerStringNCLOB 类型
ByteArrayTypeHandlerbyte[]任何兼容的字节流类型
BlobTypeHandlerbyte[]BLOB 和 LONGVARBINARY 类型
DateTypeHandlerDate(java.util)TIMESTAMP 类型
DateOnlyTypeHandlerDate(java.util)DATE 类型
TimeOnlyTypeHandlerDate(java.util)TIME 类型
SqlTimestampTypeHandlerTimestamp(java.sql)TIMESTAMP 类型
SqlDateTypeHandlerDate(java.sql)DATE 类型
SqlTimeTypeHandlerTime(java.sql)TIME 类型
ObjectTypeHandlerAny其他或未指定类型
EnumTypeHandlerEnumeration 类型VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。

你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。要这样做的话,简单实现 TypeHandler 接口(org.mybatis.type),然后映射新的类型处理器类到 Java 类型,还有可选的一个 JDBC 类型。例如:

a、ExampleTypeHandler.java

public class ExampleTypeHandler implements TypeHandler {

    public void setParameter(PreparedStatement ps, int i, Object parameter,JdbcType jdbcType) throws SQLException {
        ps.setString(i, (String) parameter);
    }
    
    public Object getResult(ResultSet rs, String columnName) throws SQLException {
        return rs.getString(columnName);
    }
    
    public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {
        return cs.getString(columnIndex);
    }
}

b、MapperConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="database.properties"/>
    
    <!-- 定义自己的类型处理器 -->
    <typeHandlers>
        <typeHandler javaType="String" jdbcType="VARCHAR" handler="org.mybatis.example.ExampleTypeHandler"/>
    </typeHandlers>
    
    <!-- 忽略其他配置 -->
</configuration>

使用这样的类型处理器将会覆盖已经存在的处理 Java 的 String 类型属性和 VARCHAR 参数及结果的类型处理器。要注意 MyBatis 不会审视数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指定那是 VARCHAR 类型的字段,来绑定到正确的类型处理器上。这是因为 MyBatis 直到语句被执行都不知道数据类型的这个现实导致的。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号