继承mapper t 是报错

在使用MyBatis或MyBatisPlus进行开发时,经常会遇到一些因为继承关系导致的报错问题,在MyBatisPlus中,当我们使用泛型继承的方式来自定义Service层时,可能会遇到“Not Found TableInfoCache”的错误,这个错误通常发生在多继承的情况下,由于泛型解析的问题,导致无法正确识别实体类和Mapper接口。,我们需要理解错误发生的背景和原因,在MyBatisPlus中,
ServiceImpl类提供了许多便捷的方法,如
updateBatchById
saveBatch,这些方法能够让我们以更简洁的方式进行批量操作,当我们的Service层继承了一个或多个基类时,尤其是这些基类使用了泛型,就可能会出现
TableInfoCache找不到的问题。,原因在于,MyBatisPlus内部通过反射机制来获取当前操作对应的实体类类型(
entityClass)和Mapper接口类型(
mapperClass),在多继承的情况下,如果基类的泛型参数没有被正确指定或者被覆盖,反射机制可能会错误地解析为
java.lang.Object,而不是我们期望的实体类类型,这就导致了
getTableInfo方法返回
null,从而抛出“Not Found TableInfoCache”的错误。,为了解决这个问题,我们可以采取以下策略:,1、
确保基类使用正确的泛型参数:如果我们的Service层继承了多个基类,需要确保所有的基类都使用了
<M, T>这样的泛型参数,其中
M代表Mapper接口,
T代表实体类,这样,MyBatisPlus就能够正确地解析到实体类和Mapper信息。,2、
重写currentModelClasscurrentMapperClass方法:如果因为某些原因,我们不能改变基类的泛型参数,我们可以通过重写
ServiceImpl中的
currentModelClass
currentMapperClass方法来手动指定实体类和Mapper接口。,下面是一个示例:,在这个示例中
ReflectionKit.getSuperClassGenricType方法来自MyBatisPlus工具类,它可以帮助我们获取到泛型参数的实际类型。,3、
避免多继承导致的泛型冲突:如果可能,尽量避免在Service层进行多继承,如果确实需要,确保各个基类之间在泛型参数使用上不发生冲突。,4、
检查实体类和Mapper的对应关系:有时,即使我们正确指定了泛型参数,但由于Mapper接口或实体类的位置或包发生了变化,也可能导致
TableInfoCache找不到的问题,检查并确保Mapper接口和实体类的位置和包路径是正确的。,通过上述策略,我们通常可以解决因为继承关系导致的MyBatisPlus泛型解析错误,在解决这类问题时,理解MyBatisPlus内部的类型解析机制是很重要的,这样,即使遇到不同形式的错误,我们也能够根据原理找到相应的解决办法。,对于已经发生的错误,我们应该通过查看日志,仔细分析错误信息,确定错误的具体原因,在调整代码之后,务必进行全面的测试,确保修改后的代码能够稳定运行,不会影响到其他部分的业务逻辑,这样,我们才能确保在保证功能正确的同时,也保持了代码的健壮性。, ,public class CustomServiceImpl<M extends BaseMapper<T>, T> extends ServiceImpl<M, T> { @Override protected Class<T> currentModelClass() { // 手动指定实体类类型 return (Class<T>) ReflectionKit.getSuperClassGenricType(getClass(), 1); } @Override protected Class<M> currentMapperClass() { // 手动指定Mapper接口类型 return (Class<M>) ReflectionKit.getSuperClassGenricType(getClass(), 0); } },

原创文章,作者:admin,如若转载,请注明出处:https://www.vaicdn.com/news/75095.html

(0)
adminadmin
上一篇 2024 年 4 月 19 日 上午12:22
下一篇 2024 年 4 月 19 日 上午12:22

相关推荐

  • 百度云网盘

    【百度云lx.cdn】是百度云推出的一款CDN加速服务,可以帮助用户将网站、应用等内容分发到全球各地的服务器上,从而提高访问速度和稳定性,使用百度云lx.cdn可以有效地减轻服务器…

    2024 年 4 月 13 日
  • 免费cdn 自定义ssl

    【免费cdn与自定义ssl:打造安全、高速的网站】,随着互联网的普及,越来越多的企业开始建立自己的官方网站,以展示品牌形象、提供服务信息和拓展业务渠道,如何让用户在访问网站时能够获…

    2024 年 4 月 13 日
  • 台湾服务器和香港服务器的共同点有哪些

    台湾服务器和香港服务器作为亚洲区域内的两大数据中心枢纽,它们之间存在多个共同点,以下是对这两个地区服务器服务特点的详细技术介绍:,网络连接性,,台湾和香港都拥有良好的国际网络连接性…

    2024 年 4 月 14 日
  • 越南视频存储服务器配置应该怎么选?

    越南视频存储服务器配置选择指南,当您在越南或任何其他地区设置视频存储服务器时,需要考虑多种因素以确保您的服务器能够有效地处理和存储大量的视频数据,以下是一些关键要素,以及如何选择适…

    2024 年 4 月 19 日
  • 云服务器备案该填写什么信息? (备案时的云服务器填什么)

    在中国大陆地区,根据国家法律法规的要求,所有在中国提供服务的云服务器必须完成工信部规定的ICP备案,这是一项法定程序,备案过程中需要填写一系列信息,确保云服务合法合规地运营,以下是…

    2024 年 4 月 13 日
  • 云主机的功能是什么

    云主机,又称为虚拟私有服务器(Virtual Private Server, VPS),是一种基于云计算技术的服务器托管服务,它通过虚拟化技术在物理服务器上划分出多个独立的虚拟服务…

    2024 年 4 月 14 日
  • mongo和mongodb区别

    1、应用场景,mongodb是一个非关系型数据库(NoSQL),主要用于存储和查询大量非结构化或半结构化数据,它适用于大数据、实时分析和高并发访问的场景,而Tomcat是一个用于部…

    2024 年 4 月 13 日
  • 您的戴尔服务器无法正常开机?了解一下这些可能的原因和解决方案,避免服务器点不亮的问题。 (戴尔服务器点不亮)

    当您的戴尔服务器无法正常开机,即遭遇“点不亮”的问题时,这通常意味着服务器在启动过程中遇到了故障,要解决这个问题,我们需要了解可能导致服务器无法启动的原因,并掌握相应的解决方案,以…

    2024 年 4 月 13 日
  • java进度条显示刻度的方法是什么

    在Java中,我们可以使用swing库中的JProgressBar组件来实现进度条的显示,JProgressBar组件提供了一个进度条,可以用于表示某个操作的完成进度,它有两个主要…

    2024 年 4 月 13 日
  • 服务器(Server)运维策略

    服务器(Server)运维策略,1、定期检查服务器硬件状态,包括电源、风扇、硬盘等。, ,2、使用监控工具实时监测服务器温度、电压、风扇转速等参数。,3、备份重要数据并存储在安全的…

    2024 年 4 月 19 日