天天看点

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注解