MyBatis——mapper接口多參數
- 一、不能使用多參數的原因
- 二、解決方案1:利用map對象預設的key值
-
- 1、為什麼可以用這種方式?
- 2、解決方式:利用arg或param
- 三、解決方案2:利用@Param注解
本次所有的内容基于上次的文章,如果有什麼不懂的可以看上次的文章
點選這裡
一、不能使用多參數的原因
映射檔案中parameterType屬性隻能放一個參數,是以按理來說隻能有一個參數傳入,但是有一個方法貌似是能側面解決這一問題,就是參數類型為map對象時,map集合中可以存放多個值,那麼我們就帶着這個方法走下去!
二、解決方案1:利用map對象預設的key值
1、為什麼可以用這種方式?
我目前的mysql資料庫裡的users表資料
編寫一個模拟登入的案例,給定賬号和密碼,查詢資料庫是否存在并正确
編寫SQL與mapper接口
SQL映射檔案内容
<!-- 多參數的使用 實際上利用輸入類型為map的形式 -->
<!-- 實作 -->
<select id="findUserOne" resultType="user">
select * from users where username = #{username} and password = #{password}
</select>
Mapper接口内容
//mapper多參數傳入
User findUserOne(String username, String password);
編寫測試方法進行測試
//多參數mapper傳入
//利用map的預設key arg0,arg1....
@Test
public void findUser(){
User user = userMapper.findUserOne("user15", "123456");
System.out.println(user);
}
測試結果
提示username和password找不到,隻有agr0,arg1…
或param1,param2…
是以我們可以使用map的預設key值,進行多參數的傳入
2、解決方式:利用arg或param
arg解決,映射檔案中的參數值改為arg0和arg1
<!-- 多參數的使用 實際上利用輸入類型為map的形式 -->
<!-- 利用arg -->
<select id="findUserOne" resultType="user">
select * from users where username = #{arg0} and password = #{arg1}
</select>
再次測試,即可成功
param解決,映射檔案中的參數值改為param1和param2
<!-- 多參數的使用 實際上利用輸入類型為map的形式 -->
<!-- 利用param -->
<select id="findUserOne" resultType="user">
select * from users where username = #{param1} and password = #{param2}
</select>
再次測試,依然是成功
三、解決方案2:利用@Param注解
修改mapper接口,@Param()
第一個括号裡寫的是 value = “username” 這是規範寫法,給value指派username
第二個括号裡直接寫的是"password",因為@Param注解裡隻有一個參數value,是以可以省略
//mapper多參數傳入
User findUserOne(@Param(value = "username") String username, @Param("password") String password);