Mybatis:Invalid bound statement (not found)問題困擾

Mybatis的配置方法可以見以下鏈接

https://blog.csdn.net/quan278905570/article/details/97791559

這裏說明一下確定配置正確的情況下出現“Invalid bound statement (not found)”問題。

問題描述:

MemberDAO.java文件內容如下

package com.gszh.wmcp.project.weixinweb.dao;

import com.gszh.wmcp.project.weixin.model.Member;

public interface MemberDAO {

	public Member getMember(String Openid);
}

MemberDAOMapper.xml文件內容如下:

<?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.gszh.wmcp.project.weixinweb.dao.MemberDAO">

	 <select id="getMember" resultType="com.gszh.wmcp.project.weixin.model.Member">
		SELECT * FROM t_member 
		where Openid=#{Openid} limit 1
	</select> 	 
</mapper>

調用方法的內容如下:

	@Autowired
	private MemberDAO memberDAO;

	@RequestMapping(value = "/AddMember", method = RequestMethod.POST)
	@ResponseBody
	public ResultMsg AddMember() {
		if (memberDAO.getMember("123") == null) {
			// memberDAO.addMember(member);
		} else {
			// memberDAO.updateMember(member);
		}
		return resultMsg;
	}

以上配置正確,沒有問題。但是系統報錯

Invalid bound statement (not found): com.gszh.wmcp.project.weixinweb.dao.MemberDAO.getMember

提示說明沒有正確找到方法getMember的xml映射。

反覆排查和上網搜索了很久,還是沒有找到真正原因。這個問題困擾了整整3天。最後解決了,不得不記錄一下,免的下次繼續犯錯。。

解決方案:

在另一個DAO.java文件中發現了問題,此DAO包含了5個接口方法,但對應的Mapper.xml文件卻只有前2個。

package com.gszh.wmcp.project.weixinweb.dao;

import java.util.List;

import com.gszh.wmcp.project.weixin.model.BillSend;

public interface WXwebDAO {

	// 獲取賬單列表
	public List<BillSend> getBillSendList();

	// 獲取指定用戶賬單列表
	public List<BillSend> getBillSendListByArchID(List<String> ids);

	// 獲取首頁列表
	public List<WebSlide> getWebSlides(String GroupName);

	// 獲取頁面數據
	public WebPage getWebPages(@Param("PageCode") String PageCode);

	// 獲取文章列表
	public List<WebArticle> getArticles(@Param("ClassName") String ClassName);

}

WXwebDAOMapper.xml文件內容

<?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.gszh.wmcp.project.weixinweb.dao.WXwebDAO">
	<!-- 微信繳費相關字段信息 --> 
	 <resultMap type="com.gszh.wmcp.project.weixin.model.BillSend" id="BillSend"> 
		<result column="Bill_ID" jdbcType="INTEGER" property="BillID"/>
	    <result column="Bill_ArchNo" jdbcType="VARCHAR" property="BillArchNo"/>
	    <result column="Bill_UserName" jdbcType="VARCHAR" property="BillUserName"/>
	    <result column="Bll_WeixinNo" jdbcType="VARCHAR" property="BllWeixinNo"/>
	    <result column="Bill_Address" jdbcType="VARCHAR" property="BillAddress"/>
	    <result column="Bill_Arrears_Count" jdbcType="VARCHAR" property="BillArrearsCount"/>
	    <result column="Bill_Arrears_fee" jdbcType="VARCHAR" property="BillArrearsfee"/>
	    <result column="Bill_AddDate" jdbcType="VARCHAR" property="BillAddDate"/>
	    <result column="Bill_IsSend" jdbcType="VARCHAR" property="BillIsSend"/>
	    <result column="Bill_Month" jdbcType="VARCHAR" property="BillMonth"/>
	</resultMap> 
	
	<!-- 查詢微信庫賬單列表 2019-07-29 create -->
	<select id="getBillSendList" resultMap="BillSend" parameterType = "map">
		SELECT tbs.Bill_UserName, tbs.Bill_ArchNo, tbs.Bll_WeixinNo, tbs.Bill_Address,
		       tbs.Bill_Arrears_Count, tbs.Bill_Arrears_fee, tbs.Bill_AddDate,
		       tbs.Bill_IsSend, tbs.Bill_Month,tbs.Bill_ID
		  FROM T_BillSend tbs
		WHERE tbs.Bill_IsSend='0'		
	</select>
	
	<!-- 查詢微信庫賬單列表 2019-08-13 create -->
	<select id="getBillSendListByArchID" resultMap="BillSend">
		SELECT tbs.Bill_UserName, tbs.Bill_ArchNo, tbs.Bll_WeixinNo, tbs.Bill_Address,
		       tbs.Bill_Arrears_Count, tbs.Bill_Arrears_fee, tbs.Bill_AddDate,
		       tbs.Bill_IsSend, tbs.Bill_Month,tbs.Bill_ID
		  FROM T_BillSend tbs
		WHERE tbs.Bill_IsSend='0' and tbs.Bill_ArchNo in
		  <foreach item="item" index="index" collection="list"
		      open="(" separator="," close=")">
		        #{item}
  		</foreach>		
	</select>
</mapper>

某個DAO和Mapper.xml文件沒有一一對應,導致影響了其他mapper的正常映射,但系統的報錯並不能定位到出錯的mapper文件,還需自己去一一檢查,才能找到問題所在。這個漏寫的xml方法,應該是我當時沒有完成的工作,隔幾天再打開的時候發現運行報錯,走了不少彎路。謹記。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章