开发者社区 问答 正文

关于Junit4 Spring中,sqlSession读取不到sql语句ID的问题:报错

在测试代码注入的Service中,sqlSession获取不到,导致了Mapper.xml中的sql语句读取不到

拜托高手帮忙看一下。

如下图


这是mybatis的

这是spring的


这是接口和sql



应该是spring扫描不到mapper.xml的东西

java.lang.AssertionError: Mapped Statements collection does not contain value for com.hitachi.overall.db.mapper.UserGroupsMapper.findById
    at org.junit.Assert.fail(Assert.java:92)
    at com.hitachi.overall.service.UserGroupServiceImplTest.testFindById01(UserGroupServiceImplTest.java:108)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:44)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
    at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

-**--*-

展开
收起
kun坤 2020-06-07 14:47:56 827 分享 版权
阿里云 AI 助理回答

根据你提供的错误信息,问题在于Spring在扫描时没有找到对应的Mapper配置文件,导致无法创建SQL映射的Mapped Statements。这里有几个可能的原因和解决方法:

  1. 确保mapper.xml文件路径正确

    • Spring Boot项目中,MyBatis的Mapper XML文件通常需要放在resources/mappers目录下(或其它指定的目录),并且这个目录需要被Spring正确配置以进行扫描。
    • 检查你的mybatis-config.xml(如果有的话)或者Spring的配置类中是否正确指定了mapper的位置。
  2. Spring配置

    • 在Spring的配置中,你需要确保有正确的配置来扫描Mapper接口和XML文件。如果你使用的是Java配置,可以是这样的:
      @Configuration
      @MapperScan("com.hitachi.overall.db.mapper") // 确保这里的包路径与你的Mapper接口所在路径一致
      public class MyBatisConfig {
       // 其它配置...
      }
      
    • 如果是XML配置,应该有类似下面的设置:
      <mybatis:scan base-package="com.hitachi.overall.db.mapper"/>
      
  3. 检查依赖

    • 确保你的项目中包含了所有必要的MyBatis和Spring整合的依赖,并且版本兼容。
  4. 资源文件加载

    • 确认在构建和运行时,mapper.xml文件确实被打包到了最终的可执行文件中(比如JAR/WAR中的resources目录下)。
  5. 命名和路径一致性

    • Mapper接口和其对应的XML文件名需要保持一致(不包括.xml扩展名),并且位于正确的包结构下。
  6. 测试环境配置

    • 特别注意在测试环境下,确保测试类能够访问到应用上下文,以及MyBatis的相关配置被正确加载。

请按照上述建议检查并调整你的配置,这应该能帮助你解决问题。如果问题依旧,请提供更多的配置细节,以便更准确地定位问题所在。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答