mybatis报错 Invalid bound statement (not found)的解决方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LJX_ahut/article/details/80927425

在使用mybatis进行简单查询时报了一个这样的错:

org.apache.ibatis.binding.BindingException:Invalid bound statement (not found): org.lujx.dao.StudentDAO.getStudentById
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:223)
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48)
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
at com.sun.proxy.$Proxy12.getStudentById(Unknown Source)
at org.lujx.service.StudentService.getStudent(StudentService.java:15)
at org.lujx.test.StudentServiceTest.testGetStudent(StudentServiceTest.java:22)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

错误表示的是mapper.xml和DAO.java文件没有对应绑定。

首先检查直接关联的两个文件,本例子中的是StudentDAO.java和StudentDAO.xml两个文件,其中的xml文件中namespace要对应DAO中的包名类名所在的准确位置,其次还要注意字符串的格式。(位置映射正确是前提)

<mapper namespace="org/lujx/dao/StudentDAO">   这种格式是错的 
<select id="getStudentById" parameterType="int" resultType="Student">
select * from students where id=#{id}
</select>
</mapper> 
应该写成namespace="org.lujx.dao.StudentDAO"   

一般情况到这里就解决了,如果还是有报错,还要检查一下几个方面(本人从网上的前辈经验总结的):

1.检查方法的命名是否一致

xml文件的select标签的id对应dao文件的方法名,两者必须完全一致

2.检查参数和返回值是否一致

xml文件中的parameterType要和dao文件方法的传入参数一致;dao文件中的返回值要有xml中的resultMap或者resultType对应,请注意,如果没有自定义的resultMap,请注意返回值格式。

3.确认引入xml配置文件是否正确(例子如下)

<property name="configLocation" value="classpath:org/lujx/configuration/mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:org/lujx/mappers/**/*.xml"></property>

<property name="typeAliasesPackage" value="org/lujx/model"></property>

ps:以上是配置sqlSessionFactory是的配置项,也可以在mybatis的配置文件里配置,主要注意的是文件路径


猜你喜欢

转载自blog.csdn.net/LJX_ahut/article/details/80927425