前文
本文章主要正对org.apache.ibatis.executor.result.ResultMapException
异常出现情况分析。从原理角度明白为啥会有这样的异常,以后不管那种场景下,明白原理后,不需要百度自己即可知道问题的根源。
怎么会出现这样错误
情况一
一种是自己数据字段类型和实体类型没有对应的映射的,比如数据库是user_id 是bigint实体是user_id 是Date
情况二
字段都对的,就是使用了lombok.Builder @Builder 这个会给我们自动生成构造方法
通过源码分析原理
情况一分析
根据实体类型获取对应的Handler 处理数据库查出的值,发现转换的时候不合法。
情况二分析
这个是由于咱们代码实体顺序和数据库不一致,导致@Builder 生成的构造方法是按照实体来得当遍历比对的时候就发现类型不一致的,根本原因还是情况一。
如何解决
情况一解决
对象类型值与mysql 一一对应
情况二解决
- 剔除注解@Builder 或者@AllArgsConstructor 代理生成构造方法注解都要剔除。
- 第一条不剔除的话,按照数据库查询出来顺序来构造类的构造方法。
- 还有一种情况就是返回的实体是组合实体,比如多表联查的实体Vo 或者DTO,一定慎用@Builder.