关于 batis.binding.BindingException: Invalid bound statement (not found) 解决方案

一、问题描述

今天在使用 mybatis 、spring 和 servlet 进行整合开发的时候报了这样的一个错误。

Caused by: org.apache.ibatis.binding.BindingException: 
Invalid bound statement (not found): com.demo.sm.dao.DepartmentDao.selectAll

二、解决方案

首先有几点是必须要注意的,不然就会莫名其妙的出现这个问题:

1. DAO 接口名一定要与 Mapper 文件的名称一模一样

2. Mapper 文件中的 namespace 路径一定要与 DAO 接口的路径一致

3. 还有一点特别重要,即 Mapper 文件必须要放置到 resources 目录中,否则不会被编译

4. resources 目录中的 Mapper 文件的路径一定要与 DAO 接口的路径完全一致

三、问题分析

开始的时候我的 Mapper 文件是放置到 resources 目录下了,但是我在 resources 下创建目录时是直接使用 com.demo.sm.dao 来进行创建的,这样就导致编译后的文件目录结构是下面这样的(应该不会有人像我这么蠢吧)。

关于 batis.binding.BindingException: Invalid bound statement (not found) 解决方案_第1张图片

这样就导致了一个问题,就是编译后的 DAO 接口和 Mapper 并不位于同一个目录下,我们进一步验证会发现,正确的创建方式应该是 com/demo/sm/dao ,同时这样两种方式创建出来的目录名是完全一样的,所以编译之前仅通过目录名是完全无法分辨的,所以一定要细心注意这个问题。

关于 batis.binding.BindingException: Invalid bound statement (not found) 解决方案_第2张图片

所以当我们使用了正确的方式进行目录创建,编译后的目录结构应该是下面这样的,这时 DAO 接口和 Mapper 文件就位于同一目录下,可以正常工作了。虽然是小的细节问题,但是一定要注意啊。 

关于 batis.binding.BindingException: Invalid bound statement (not found) 解决方案_第3张图片

你可能感兴趣的:(Java)