天天看點

MyBatis——mapper接口多參數一、不能使用多參數的原因二、解決方案1:利用map對象預設的key值三、解決方案2:利用@Param注解

MyBatis——mapper接口多參數

  • 一、不能使用多參數的原因
  • 二、解決方案1:利用map對象預設的key值
    • 1、為什麼可以用這種方式?
    • 2、解決方式:利用arg或param
  • 三、解決方案2:利用@Param注解

本次所有的内容基于上次的文章,如果有什麼不懂的可以看上次的文章

點選這裡

一、不能使用多參數的原因

映射檔案中parameterType屬性隻能放一個參數,是以按理來說隻能有一個參數傳入,但是有一個方法貌似是能側面解決這一問題,就是參數類型為map對象時,map集合中可以存放多個值,那麼我們就帶着這個方法走下去!

二、解決方案1:利用map對象預設的key值

1、為什麼可以用這種方式?

我目前的mysql資料庫裡的users表資料

MyBatis——mapper接口多參數一、不能使用多參數的原因二、解決方案1:利用map對象預設的key值三、解決方案2:利用@Param注解

編寫一個模拟登入的案例,給定賬号和密碼,查詢資料庫是否存在并正确

編寫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值,進行多參數的傳入

MyBatis——mapper接口多參數一、不能使用多參數的原因二、解決方案1:利用map對象預設的key值三、解決方案2:利用@Param注解

2、解決方式:利用arg或param

arg解決,映射檔案中的參數值改為arg0和arg1

<!-- 多參數的使用 實際上利用輸入類型為map的形式 -->
<!-- 利用arg -->
<select id="findUserOne" resultType="user">
    select * from users where username = #{arg0} and password = #{arg1}
</select>
           

再次測試,即可成功

MyBatis——mapper接口多參數一、不能使用多參數的原因二、解決方案1:利用map對象預設的key值三、解決方案2:利用@Param注解

param解決,映射檔案中的參數值改為param1和param2

<!-- 多參數的使用 實際上利用輸入類型為map的形式 -->
<!-- 利用param -->
 <select id="findUserOne" resultType="user">
     select * from users where username = #{param1} and password = #{param2}
 </select>
           

再次測試,依然是成功

MyBatis——mapper接口多參數一、不能使用多參數的原因二、解決方案1:利用map對象預設的key值三、解決方案2:利用@Param注解

三、解決方案2:利用@Param注解

修改mapper接口,@Param()

第一個括号裡寫的是 value = “username” 這是規範寫法,給value指派username

第二個括号裡直接寫的是"password",因為@Param注解裡隻有一個參數value,是以可以省略

//mapper多參數傳入
User findUserOne(@Param(value = "username") String username, @Param("password") String password);
           
MyBatis——mapper接口多參數一、不能使用多參數的原因二、解決方案1:利用map對象預設的key值三、解決方案2:利用@Param注解