mybatis配置映射问题org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

  • 随着做的小项目的体量增加,我就想着给各类mapper以及*.xml分个类
    mybatis配置映射问题org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):_第1张图片

  • 担心会出点什么幺蛾子,所以用以前的测试类测试了一下,就爆出来这个错误

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ch.home.mapper.restDishMapper.DishCustomMapper.getDishCustomAndSource

	at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:235)
	at org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:53)
	at org.apache.ibatis.binding.MapperProxy.lambda$cachedMapperMethod$0(MapperProxy.java:61)
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
	at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:61)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:56)
	at com.sun.proxy.$Proxy75.getDishCustomAndSource(Unknown Source)
	at com.ch.home.testMapper.testDishCustomMapper.testGetDishCustomAndSource(testDishCustomMapper.java:35)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
	at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
  • 看名字可以推断是mybatis之间的映射出了点问题,要么就是找不到Mapper接口,要么就是找不到*.xml文件

随便挑了一个xml文件看了一下发现映射的mapper全类名是对的(改完后的全类名)
xml

  • 于是我就猜测是找不到xml文件

关于xml文件的扫描

先给出解决方法:yml中的配置

  # 指定sql映射文件位置,mapper下的所有.xml文件都是映射文件
  mapper-locations: classpath:mybatis/mapper/**/*.xml
#  mapper-locations: classpath:mybatis/mapper/*.xml

  • 我用的是Spring boot,所以mybatis中的映射关系直接配置在yml文件中,没有打注释的是改完之后的,由于的分了类,所以层次上加了一层,因此扫描包的逻辑就是扫描mapper包下所有包的中的所有xml文件,这样才可以扫描到xml,听起来有点绕,以前用配置文件的时候好像没这么麻烦。
  • 如果有小伙伴没有用springboot,而是用mybatis配置文件的方式,那么只需要在配置文件中修改即可

mybatis配置映射问题org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):_第2张图片

你可能感兴趣的:(#,Mysql)