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);