如果我的报错信息和你的不一样,请查看一下目录的最后一个模块:报错信息的其他问题可能性,可能会有你想要的答案!
错误原文如下(关键信息已用红色字体标出):
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testDemoController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'testDemoServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'testDemoMapper' defined in file [D:\JAVA\项目集\testdemo\target\classes\com\testdemo\demos\mapper\TestDemoMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: com/baomidou/mybatisplus/core/handlers/PostInitTableInfoHandler
问题所在:
如红色字体所示,工厂方法“”SQLSessionFactory“”引发异常;嵌套异常为java.lang.NoClassDefFoundError:com/baomidou/mybatisplus/core/handlers/PostInitTableInfoHandler。
没有找到PostInitTableInfoHandler。一般报这种错误的原因是mp的依赖有冲突。这个时候我们就需要去查看自己的springboot版本是否与mp的版本有兼容冲突。
注意:如果你的springboot版本在3.0以上,那么你的mp的依赖一定要在3.5.2以上
其实不只是springboot的版本可能与mp有冲突,也有可能是其他的一些依赖起的冲突。
就比如我的问题就是依赖冲突问题。在我的项目中用到了mp的代码生成依赖。
而我的mp的版本是
正是因为这两个依赖的版本version不同导致了我的项目报错。
解决方法:
我们只需要将generator的版本号改成与mp依赖的版本号一致即可。如下图:
报错信息的其他问题可能性
从报错信息的蓝色字体看,初步分析可能会以为是自己的一些注解没加到位。比如:
- @Service是否加到了Service的实现类上。
- @Mapper是否加到了**mapper的接口上。
- 启动类上是否加上了@MapperScan("mapper的路径")注解。
- yml或者xml配置中是否标注了mp的扫描包路径,如果没有配置那么spring会默认扫描resources包下的mapper包下的所有xml文件。
- 是否存在两个service之间的相互调用,也就是说A调用B,同时B又调用A,这样的情况也会导致报错,只不过报错信息容易分辨,会直接提示你存在循环调用的问题。
- 查看你的***mapper.xml文件的namespace是否是正确的,正不正确可以通过按住键盘的crtl键然后将光标放到你的namespace的路径上,如果变色说明路径存在,然后再去查看路径是否正确。
总之,mp虽然好用,但是一定要注意它的版本兼容性,这些错误真的很难分辨。我的问题困扰了我一整天。还有就是,一定要多看你的报错信息,提取有价值的报错log,一定会从中找到你的错误所在!
如果我的文章不能解决你的问题,尽可将问题截图放到评论区!