踩坑记录:Invalid bound statement (not found)

问题场景

  • 在使用 Mybatis 集成 Mybatis Plus,自定义了 interface Mapper,在使用 Maven 打包的时候,就提示如下报错了

    1
    org.springframework.security.authentication.InternalAuthenticationServiceException: Invalid bound statement (not found): com.izpan.service.system.mapper.SysUserMapper.findUserByUsername
  • 这是个很常见的错误,就是提示你无法绑定到方法(因为找不到你的 xml 文件);其中 Mybatis Plus 官网也针对这种常见问题给了解决方法;点击查看

解决方案

  1. 检查 xml 文件所在的 package 名称是否和 interface 对应的 package 名称一一对应
  2. 检查 xml 文件的 namespace 是否和 xml 文件的 package 名称一一对应
  3. 检查定义的函数名称能否对应上
  4. 去掉 xml 文件中的中文注释
  5. 随意在 xml 文件中加一个空格或者空行然后保存(主要是触发了ide的自动编译功能)

请结合 Mybatis Plus 官网 + 以上解决点进行结合查找本身的解决方案;如再无法解决,请查看打包后的目录(本地的 target 中可直接查看)下有无 xml 文件;

  • 给出我本地 target 的生成目录,要跟项目的目录文件一一对应(我遇到的就是这个坑)
  • pom 文件中添加
1
2
3
4
5
6
7
8
9
10
11
12
<build>
<resources>

<resource>

<directory>src/main/javadirectory>
<includes>
<include>**/*.xmlinclude>
includes>
resource>
resources>
build>

项目配置文件

  • application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mybatis-plus:
# 如果是放在src/main/java目录下 classpath:/com/yourPackage/*/mapper/*Mapper.xml
# 如果是放在resource目录 classpath:/mapper/*Mapper.xml
mapper-locations: classpath*:/com/izpan/service/*/mapper/*Mapper.xml
# 实体扫描,多个package用逗号或者分号分隔
type-aliases-package: com.izpan.core.entity,com.izpan.apis.*.model.entity
type-enums-package: com.izpan.core.enums
global-config:
db-config:
# 主键类型
id-type: id_worker
field-strategy: not_null
# 刷新mapper 调试神器(生产环境要关闭)
refresh: true
banner: false
  • pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
<build>
<resources>

<resource>

<directory>src/main/javadirectory>
<includes>
<include>**/*.xmlinclude>
includes>
resource>
resources>
build>
  • interface SysUserMapper
1
2
3
4
5
6
7
/**
* 查找用户
*
* @param username
* @return
*/
SysUserDO findUserByUsername(String username);
  • SysUserMapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30


<mapper namespace="com.izpan.service.system.mapper.SysUserMapper">


<resultMap type="com.izpan.apis.system.model.entity.SysUserDO" id="SysUserMap">
<result property="id" column="id"/>
<result property="userName" column="user_name"/>
<result property="password" column="password"/>
<result property="nickName" column="nick_那么"/>
<result property="phone" column="phone"/>
<result property="salt" column="salt"/>
<result property="email" column="email"/>
<result property="sex" column="sex"/>
<result property="avatar" column="avatar"/>
<result property="deptId" column="dept_id"/>
<result property="status" column="status"/>
<result property="lastLoginTime" column="last_login_time"/>
<result property="lastResetTime" column="last_reset_time"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="deleted" column="deleted"/>
resultMap>

<select id="findUserByUsername" resultMap="SysUserMap">
SELECT * FROM sys_user WHERE USER_那么 = #{username}
select>
mapper>

以上相关配置文件仅供参考,本人是为了记坑,以免下次又踩到。
网页渲染有问题,不知道咋搞;