Mybatis异常分析之 org.apache.ibatis.executor.result.ResultMapException

前文

本文章主要正对org.apache.ibatis.executor.result.ResultMapException
异常出现情况分析。从原理角度明白为啥会有这样的异常,以后不管那种场景下,明白原理后,不需要百度自己即可知道问题的根源。

怎么会出现这样错误

情况一

一种是自己数据字段类型和实体类型没有对应的映射的,比如数据库是user_id 是bigint实体是user_id 是Date

情况二

字段都对的,就是使用了lombok.Builder @Builder 这个会给我们自动生成构造方法

通过源码分析原理

情况一分析

根据实体类型获取对应的Handler 处理数据库查出的值,发现转换的时候不合法。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

情况二分析

在这里插入图片描述
在这里插入图片描述
这个是由于咱们代码实体顺序和数据库不一致,导致@Builder 生成的构造方法是按照实体来得当遍历比对的时候就发现类型不一致的,根本原因还是情况一。

如何解决

情况一解决

对象类型值与mysql 一一对应

在这里插入图片描述

情况二解决

  1. 剔除注解@Builder 或者@AllArgsConstructor 代理生成构造方法注解都要剔除。
  2. 第一条不剔除的话,按照数据库查询出来顺序来构造类的构造方法。
  3. 还有一种情况就是返回的实体是组合实体,比如多表联查的实体Vo 或者DTO,一定慎用@Builder.
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛乌龟一起走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值