使用 tk.mybatis/mapper-spring-boot-starter 出现获取不到实体类的异常

7 篇文章 0 订阅
4 篇文章 0 订阅

突现问题

我在重构一个项目的时候,准备使用 tk.mybatis/mapper-spring-boot-starter 2.0.3 版本,过去的项目使用的主版本是1,项目启动正常,调用接口流程里面使用了通用 mapper 的一些方法,在执行下面代码出现异常

	
	Example example = new Example(User.class);
	

异常如下图,相信大家都碰到这个问题:
这里写图片描述

开始解决

查找问题所在我首先网上看看各位大牛的解决方案,一位牛人说版本问题,退到主版本号为1的就可以了,我试了下,将 tk.mybatis/mapper-spring-boot-starter 退到1.1.7版本确实可以了,但是社会在进步,我们也要不断学习,我就开始找原因,大家都知道通用 mapper 里面有一个 initEntityNameMap 方法会扫描实体类的注解,而使其能运行,主要归功于 MapperScan,我看了下两个版本的源码,其实差别不大,只是新版本做了一些优化将方法拆分,更易于解读。
于是我就看扫描注解的配置,首先看看主版本号为1的
这里写图片描述

很显然大家看到的是 org.mybatis… 主版本号为1的扫描数据访问层的注解是org.mybatis.spring.annotation.MapperScan,那我就看一看主版本为2的,如下图:

这里写图片描述

这里面的使用的 MapperScan.class 点一下,发现是 tk.mybatis.spring.annotation.MapperScan ,于是热血沸腾,立马把版本号换成2.0.3,然后扫描注解换成 tk.mybatis.spring.annotation.MapperScan,可惜啊事与愿违,结果异常还是出现了。

很是迷茫

问题出在?我真的很迷,源码看了,也按照源码的思路做了,可是结果依旧让我伤心,网上方法基本上都是和我上面说的差不多。

这里写图片描述

突然醒悟

只能一步步调式了,后来发现我的实体类放在另一个 maven 块,而 mapper 在另一个 maven 块,扫描注解是从 mapper 寻找实体类信息,然后放在 ConcurrentHashMap 里面,那么实体类上面需要 tk.mybatis.mapper 的注解,于是找到实体类的 pom.xml ,发现版本号是3.4.0,查看源码,发现和 tk.mybatis/mapper-spring-boot-starter 主版本号为1 的代码是一样的,扫描的注解也是 org.mybatis.spring.annotation.MapperScan,既然如此,那就好解决了,都是 tk.mabatis 开头的,那么 tk.mybatis.mapper 主版本为 4 的扫描注解肯定是 tk.mybatis.spring.annotation.MapperScan,于是替换成 4.0.3 版本。

终于解决

最后时刻终于来临了,重启测试,发现一切正常。

需要云服务器的不要错过优惠

阿里云低价购买云服务,值得一看

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值