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方法,應該是我當時沒有完成的工作,隔幾天再打開的時候發現運行報錯,走了不少彎路。謹記。