MyBatis使用问题
解决办法
解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题
遇到的问题
解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题
-
- 检查xml文件所在package名称是否和Mapper Interface 所在的包名
<mapper namespace="com.my.example.mapper.DeptMapper"> </mapper>
-
- DeptMapper接口的方法在DeptMapper.xml中没有,然后执行DeptMapper的方法会报错
-
- DeptMapper的方法返回值是List<Freshman>,而select元素没有正确配置ResultMap,或者只配置了ResultType
-
- 空行问题,名字是否有空行等
-
- 查看mapper的XML配置路径是否正确。
<mappers> <mapper resource="mapper/FreshmanMapper.xml"/> <!-- <mapper resource="mapper/DeptMapper.xml"/>--> <mapper class="cn.com.example.mapper.DeptMapper"/> </mappers>
-
最容易忽视的点:注意 :接口名与Mybatis的映射文件名一定要一模一样。
通过接口来实现MyBatis的使用
- 1.配置mybatis-config.xml(通过映射器接口实现类的完全限定类名)
- 2.创建对应的xml文件
- 3.在xml文件中配置namespace
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.com.example.mapper.DeptMapper">
<!---执行数据库操作-->
</mapper>
- 4.创建接口文件
- 5.提供对应的接口方法
public interface DeptMapper {
List<Student> selectAll();
}
- 6.在对应的xml文件中实现接口中的数据库操作(id值要与接口中方法对应,resultType为MyBatis中设置的typeAlias(不区分大小写))
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.com.example.mapper.DeptMapper">
<select id="selectAll" resultType="student">
select * from tb_stu
</select>
</mapper>
-
- 编写测试代码
@Test
public void testGetallStudent() {
SqlSession sqlSession = MybatisUtils.getSession();
DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
List<Student> list = mapper.selectAll();
list.forEach(student-> System.out.println(student));
}