mybatis plus 查询部分源码分析,typehandler怎么实现的?FastjsonTypehandler 查询问题怎么解决?

我们在使用mysql的json字段的时候有时为了方便,最好是查询的时候直接反序列化为对象比较好,这时候我们就用到了typehandler这个属性

首先mybatis plus 会初始化一系列的 typeHandler,并且扫描用户设置的typeHandler路径(mybatis-plus: type-handlers-package: //路径),把用户自定义的typeHandler一并初始化到 typeHandlerMap

执行查询的时候,会先处理参数,获取所传参数的typehandler,然后setparameter之类的,处理完之后会执行 baseExecutor的doquery方法

当设置 @TableName(autoResultMap = true) 时,会自动根据类型以及对应的注解去匹配,而不需要手动匹配。开始的时候就会把所有的mapper的对应的放进mappedStatements里

在doquery前就把resultMapping设置好

key为对应的我们对应的mapper里对应的方法

在mybatis解析的时候会从根据当前的方法去获取对应的映射的statement 

如selectById 这里会走到selectList,再根据我们当前的statement去从配置中获取到映射好的MappedStatement

在这个MappedStatement中,我们就可以发现,typehandler已经配置好了的

当不设置 @TableName(autoResultMap = true)时,查询的时候执行getJdbcHandlerMap方法,尝试根据字段的类型,手动从map中获取handler,把每个字段都配置上对应的handler,如果没找到handler则不处理结果也就是返回null

然后我们再把注解去掉,同样走到这里:

我们发现这里的resultMapping是空的,也就是没有自动装配,所以没有注解是到后面才做的匹配映射

所以最好的方式就是用官方推荐的: autoResultMap = true 必传。通过注解可以灵活处理

当然,我们使用自己在mapper中写的方法时,是不走自动映射的,这时候我们需要自定resultMap,把需要的的字段定义上typeHandler

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值