13.MyBatis報錯:Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter

Adela0916發表於2020-12-27

我做的功能是根據id和lastName查詢一條員工資訊記錄。

public Employee getEmpByIdAndLastName(Integer id,String lastName);
 <select id="getEmpByIdAndLastName" resultType="com.fzl.mybatis.bean.Employee" databaseId="mysql">
        select * from tbl_employee where id = #{id},last_name = #{lastName}
	</select>

當傳遞多個引數給sql對映檔案時,報錯:
在這裡插入圖片描述

這個錯誤與mybatis處理引數機制有關。
當傳入多個引數的時候,mybatis會做特殊處理。多個引數會被封裝成一個map。其中,key:param1…paramN,或者引數的索引也可以,value:傳入的引數值。
而#{}就是從map中獲取指定的key的值;因此這時候,我們依然使用#{id},#{lastName}就會報錯。
解決辦法:
明確指定封裝引數時map的key;

public Employee getEmpByIdAndLastName(@Param("id") Integer id,@Param("lastName")String lastName);

這樣就可以了。
多個引數會被封裝成 一個map,
key:使用@Param註解指定的值
value:引數值
#{指定的key}取出對應的引數值

相關文章