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不存在同名方法,或者名稱空間不對,或者返回值不對


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM