MyBatis配置文件(四):typeHandlers配置

typeHandlers又叫类型处理器,它的作用就是用来完成javaType和jdbcType之间的转换。同样,MyBatis中的类型转换也有系统定义和自定义两种。

1、系统定义typeHandlers

常见的系统定义typeHandlers如下:

类型处理器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 类型
SqlTimeTypeHandler Time(java.sql)TIME 类型
ObjectTypeHandler任意其他或未指定类型
EnumTypeHandlerEnumeration 类型VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。

2、自定义typeHandlers

你可以重写类型处理器或创建自己的类型处理器来处理不支持的或者非标准的类型,需要实现TypeHandler接口(org.mybatis.type),然后映射新的类型处理器到Java类型,还有一个可选的jdbc类型。

// ExampleTypeHandler.java
public class ExampleTypeHandler implements TypeHandler {
	// 设置sql中指定索引的参数,即将javaType转化为jdbcType
	public void setParameter(PreparedStatement ps, int i, Object parameter,JdbcType jdbcType) throws SQLException {
		ps.setString(i, (String) parameter);
	}
	// 根据列名称从结果集获取值,并将jdbcType转换成javaType
	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);
	}
}
// MapperConfig.xml
 <!--类型处理器 -->
	<typeHandlers>
		<!-- 注册自定义handler,说明它作用的jdbcType和javaType -->
		<typeHandler javaType="String" jdbcType="VARCHAR" handler="org.mybatis.example.ExampleTypeHandler"/>
	</typeHandlers>
// Mapper.xml
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="User">
    <resultMap id="ResultMap" type="com.pojo.User">
   		<id column="id" jdbcType="INTEGER" property="id" />
       <result column="name" jdbcType="VARCHAR" property="name" />
        <!-- 不使用MyDateHandler-->
        <result column="creator_id" jdbcType="VARCHAR" property="creator_id" />
        <!-- 使用ExampleTypeHandler-->
        <result column="creator" typeHandler="org.mybatis.example.ExampleTypeHandler" property="creator" />
    </resultMap>

以上就实现了自定义类型处理器的创建、配置以及使用。
注意:当没有自定义的类型处理器时,MyBatis会根据结果自动选择合适的handler进行转换。一般不需要字定义类型处理器,使用默认的就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值