mybatis-plus使用Wrapper自定义sql时出现错误:Invalid bound statement (not found)

先看正确的项目结构

正确的项目结构
其中1、2、3、4编译之后分别对应target文件夹下的1'、2'、3'、4'。

先讲一下Wrapper自定义sql的配置

  1. 首先在application.yml配置好UserMapper的解析路径。默认为"classpath:/mapper/**/.xml"。所以按照上面截图的位置配置是会默认解析到的。
mybatis-plus:
  mapper-locations:
    - 你的mapper路径

如果更换了路径,则需要按照上面yml进行重新配置,并且要确保编译后到target目录下(有的位置可能不会编译到target目录下,需要注意)

  1. 假定com.zhoushiya.demo.dao.UserMapper类编写了自定义方法selectAll()如下
package com.zhoushiya.demo.dao;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.zhoushiya.demo.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserMapper extends BaseMapper<User> {

    List<User> selectAll(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
}

  1. 那么resources.mapper.UserMapper.xml必须实现同名方法(id=selectAll),且名称空间(namespace)需要指定为com.zhoushiya.demo.dao.UserMapper,返回值(resultType)必须为com.zhoushiya.demo.entity.User
<?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="com.zhoushiya.demo.dao.UserMapper">
    <select id="selectAll" resultType="com.zhoushiya.demo.entity.User">
        SELECT * FROM user ${ew.customSqlSegment}
    </select>
</mapper>

tips:如果可以按住ctrl键指向xml中的namespace的最后一个单词,如果变成手形而且单击后可以跳转,那么肯定地址是对的。resultType同理

Invalid bound statement (not found)可能的错误原因

如果仔细看了上述注意点,那么很容易就明白可能是哪些地方出现了问题

  1. application.yml指定的mapper解析目录不对,或者target目录下没有
  2. UserMapper.xml不存在同名方法,或者名称空间不对,或者返回值不对

猜你喜欢

转载自www.cnblogs.com/zhoushiya/p/12797240.html