轉自:https://blog.csdn.net/wdehxiang/article/details/77619569
原因:
傳入多個值時,mybatis會自動將這些值轉成類似map形式的值,以0,1,2…的序列為keyName。
這里我們需要先簡單了解一下mybatis的傳值機制。Mybatis現在可以使用的parameterType有基本類型和Java負責類型
基本數據類型:包含int,String,Date等。基本數據類型作為傳參,只能傳入一個。通過#{參數名}獲取。
復雜數據類型:包含Java實體類、Map。通過#{屬性名}或#{map的keyName}獲取。
解決方案:
方案一、在Dao層mapper接口的方法中,為每個參數添加@Param注解
1 public User login(@Param(value="email") String email, @Param(value="password") String password);
1 <select id="login" resultType="User" parameterType="String"> 2 select * from user where email=#{email} and password=#{password} 3 </select>
方案二:將多個值存入Map中
1 public User login(HashMap<String,String) map);
1 <select id="login" resultType="User" parameterType="Map"> 2 select * from user where email=#{email} and password=#{password} 3 </select>
方案三:以傳遞參數的順序通過#{0},#{1}獲取
1 public User login(String email, String password);
1 <select id="login" resultType="User" parameterType="String"> 2 select * from user where email=#{0} and password=#{1} 3 </select>