这里有三种方法可以用来传递参数:
1.利用Map(不推荐);
2.利用注解(推荐,在参数小于5个时使用比较方便)
3.利用Java Bean,推荐,在参数大于5个即参数比较多时候使用。
#使用注解:
//使用注解来传递多个参数
public List<Role> findRolesByAnnotation(@Param("roleName") String rolename,@Param("note") String note);
<!--使用注解的方法来传递多个参数-->
<select id="findRolesByAnnotation" resultType="role">
select id,role_name as roleName,note from t_role where role_name like concat('%',#{roleName},'%')
and note like concat('%',#{note},'%')
</select>
这里的注解对应着映射器里的,所以两个要写一样!
#使用java bean的方法:
//使用java bean的方法来传递多个参数
public List<Role> findRolesByBean(Role role);
<!--使用Java bean的方法来传递多个参数-->
<select id="findRolesByBean" resultType="role" parameterType="com.learn.ssm.chapter3.pojo.Role">
select id,role_name as roleName ,note from t_role where role_name like concat('%',#{roleName},'%')
and note like concat('%',#{note},'%')
</select>
用的时候:
Role role = new Role();
role.setRoleName("江");
role.setNote("学");
List<Role> rolesByBean = roleMapper.findRolesByBean(role);
for (Role role1 : rolesByBean) {
log.info(role1.getRoleName());
log.info(role1.getNote());
}
执行的时候,映射器里的参数是通过反射来获得:把参数的第一个字母变成大写再和测试结合,例如:roleName变成:getRoleName();故这里参数名称要区对,要不然会抛出错误找不到对应的Getter!