目前列举的接口方法的参数只有一个,参数的类型可以分为两种,一种是基本类型,另一种是JavaBean。当参数是一个基本类型时,它在xml中对应的sql语句只会使用一个参数,例如delete方法(deleteById(user)),当它是JavaBean类时,它在xml文件中对应的sql语句会有多个参数,例如insert、update方法。
当参数较少时,可采用两种方式,一种是Map类型作为参数,或者使用@param注解。其中Map方法就是在Map中通过key来映射xml中sql使用的参数值的名字,value用来存放参数值,需要多个参数时,通过Map的key-value方法传递参数值,下面介绍通过@param方法注解的方法
前面的例子都是将多个参数合并到一个JavaBean中,并使用这个JavaBean作为接口的方法,如SysUser … ,这个适用于大量参数的情况,下面这个是适用于较少参数的情况
例、根据用户id和角色的enabled状态获取用户角色
@param usedId
@param enabled
@return
...
List<SysRole> selectRoleByUserIdAndRoleEnabled(Long userId ,Integer enabled);
在UserMapper.xml中添加代码
<select id ="selectRoleByUserIdAndRoleEnabled"
resultType ="tk.mybatis.simple.model.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>
此时调用查询方法会报错,因为参数没有注解,就会报错,可用的参数是param1、param2、0、1这些MyBatis根据参数位置自定义的名字,想要获取自己取的参数名,就要在参数前加注解,下面是更改后的代码
@param usedId
@param enabled
@return
...
List<SysRole> selectRoleByUserIdAndRoleEnabled(*@Param("userId")*Long userId ,*@Param("enabled")*Integer enabled);
ps.当使用JavaBean参数类型时,上述代码应该改写为
@param user
@param role
@return
...
List<SysRole> selectRoleByUserAndRole(*@Param("user")*SysUser user ,*@Param("role")*SysRole role);
在xml中不直接使用#{userId}和#{enabled},而是应该使用JavaBean类型的SysUser的成员来注解,而id和enabled又是成员的属性,所以分别是user.id和role.enabled