Mybatis学习日记(三)——使用@param方法传递多个参数

在上一篇博客中,我们介绍了单个参数的增删改查,然而在实际的开发中,经常会遇到多个接口参数的情况。在之前的例子中,我们都是将多个参数合并到一个JavaBean中,但是不可能每次都为不同的参数创建一个新的JavaBean,所以需要使用其他方式来传递多个参数,常见的方法有使用Map类型和使用@param注解。

使用Map类型方法主要是将需要传递的参数添加到一个Map集合中,再将Map集合作为Mybatis的参数传入,但是这种方法比较繁琐的地方在于每次需要自己创建一个Map集合并且将需要的参数添加到集合当中。如果感兴趣可以去学习一下这种方法,在这里我们主要使用的是@param注解的方法。


一.添加方法与xml代码

首先,我们在UserMapper接口中创建一个根据用户ID和角色的enabled状态获取用户角色信息的方法selectRolesByUserIdAndRoleEnabled,在这个方法声明时使用@param注解。

/**
* 根据用户ID和角色的enabled状态获取用户角色
* 
* @param userId
* @param enabled
* @return
*/
List<SysRole> selectRolesByUserIdAndRoleEnabled(
		@Param("userId")Long userId,
		@Param("enabled")Integer enabled
);

在这里给参数配置@param注解后,Mybatis会自动将参数封装成Map类型,而@param注解的值会成为Map中的key,因此在sql中可以通过配置的注解值来使用参数。

接下来在对应的xml文件中添加相应的select语句。

<select id="selectRolesByUserIdAndRoleEnabled" resultType="SysRole">
	select
		r.id,
		r.role_name roleName,
		r.enabled,
		r.create_by createBy,
		r.create_time createTime
	from sys_user u
	inner join sys_user_role ur on u.id = ur.user_id
	inner join sys_role r on ur.role_id = r.id
	where u.id = #{userId} and r.enabled = #{enabled}
</select>

可以看到,经过@param配置后的参数在xml文件的sql中可以直接使用。但是当参数是JavaBean类型时,使用@param注解后就不能直接使用,而是要通过点取值的方式。

/**
* 根据用户ID和角色的enabled状态获取用户角色
* 
* @param user
* @param role
* @return
*/
List<SysRole> selectRolesByUserIdAndRoleEnabled(
		@Param("user")SysUser user,
		@Param("role")SysRole role
);

通过这样的方式来传递参数时,在sql语句中需要使用#{user.id}和#{role.enabled}从两个JavaBean中取出指定属性的值。


二.测试结果

在UserMapperTest类中我们添加selectRoleByUserIdAndRoleEnabled方法的测试方法

@Test
public void testSelectRolesByUserIdAndRoleEnabled(){
	SqlSession sqlSession = getSqlSession();
	try{
		UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
		List<SysRole> userList = usermapper.selectRolesByUserIdAndRoleEnabled(1l, 1);
	} finally{
		sqlSession.close();
	}
}

运行后测试结果如下

selectRoleByUserIdAndRoleEnabled测试结果

上一篇:Mybatis学习日记(二)——单个参数的增删改查

下一篇:Mybatis学习日记(四)——动态SQL第一部分

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值