关于 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 来进行创建的,这样就导致编译后的文件目录结构是下面这样的(应该不会有人像我这么蠢吧)。

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

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

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值