java自定义字段设计_mybatis源码系列之自定义typeHandler

上一章我们提到typeHandler但是并没有做详细的介绍,那么现在我将详细说明一下typeHandler的作用以及自定义方式。

众所周知,mybatis是一个ORM框架,即对象关系映射框架。那我们在执行sql语句的时候是如何将Java类型的数据映射成数据库类型的值呢,这个时候就用到了typeHandler。在执行sql语句前,它会将JavaType类型的传参映射成jdbcType类型的参数,执行sql语句后它将会把jdbcType类型的执行结果映射成JavaType类型返回出去。

787ddce69d9cdb7814753856b4cc07df.png

那mybatis框架目前支持哪些类型的转换呢,下图是mybatis支持的其中一部分类型,其实所有支持的类型都会被注册到TypeHandlerRegistry的jdbcTypeHandlerMap中。

a6c40072cbeefec4b7d808149519bdbd.png

如果我们在项目开发过程中遇到了mybatis不支持的数据类型应该如何去解决呢?这个时候我们可以自定义typeHandler,据我所知mysql是在5.7版本才支持json类型的字段,而恰好mybatis目前不支持这个类型字段的映射,我将自定义一个typeHandler来支持json字段的映射。

e39e09ef4a7fc2cbe5f35445cf4e5564.png

自定义JSONObject的typeHandler

上图可以看到我自定义的com.alibaba.fastjson.JSONObject的typeHandler,我们只需要继承BaseTypeHandler类,泛型标注我们的javaType,当然也可以使用@MappedTypes和@MappedJdbcTypes注解来分别指定自定义typeHandler支持的JavaType和jdbcType。

2f863ca9b6e053a49c6edf0bc8f5be2f.png

BaseTypeHandler实现了TypeHandler接口

这只是其中一种方式,我们还可以通过另一种方式来自定义,通过实现TypeHandler接口。两种方式的本质其实都是实现了TypeHandler接口,最主要是重写了TypeHandler接口的setParameter和getResult方法,他们则是我在文章开头提到的两种类型数据的相互转换。

大家好我是Java最前沿,每天都会给大家分享有用的技术干货,感兴趣的可以关注我哟。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值