Mapper动态代理模式下的多参数处理
顺序传参法
在映射文件中,SQL 语句中的参数需要使用 arg0,arg1…或者 param1,param2…表示参 数的顺序。此方法可读性低,且要求参数的顺序不能出错,在开发中不建议使用
- 接口
List<Users> selectUsersOrderParam(String username,String usersex);
- 写法一:
<!--根据用户姓名与性别查询用户,使用顺序传参法-->
<select id="selectUsersOrderParam" resultType="users">
select * from users where username = #{arg0} and usersex= #{arg1}
</select>
- 写法二:
<!--根据用户姓名与性别查询用户,使用顺序传参法-->
<select id="selectUsersOrderParam" resultType="users">
select * from users where username = #{param1} and usersex= #{param2}
</select>
@Param 注解传参法
在接口方法的参数列表中通过@Param 注解来定义参数名称,在 SQL 语句中通过注解中所定义的参数名称完成参数位置的指定。 此方式在参数不多的情况还是比较直观的,推荐使用
- 接口
List<Users> selectUsersAnnParam(@Param("name") String username,@Param("sex") String usersex);
- mapper
<!--根据用户姓名与性别查询用户,使用@Param 注解传参法-->
<select id="selectUsersAnnParam" resultType="users">
select * from users where username = #{name} and usersex= #{sex}
</select>
POJO 传参法
在 Mapper 动态代理中也可以使用 POJO 作为传递参数的载体,在 SQL 语句中绑定参数 时使用 POJO 的属性名作为参数名即可。此方式推荐使用
- 接口
List<Users> selectUsersPOJOParam(Users users);
<!--根据用户姓名与性别查询用户,使用 POJO 传参法-->
<select id="selectUsersPOJOParam" resultType="users">
select * from users where username = #{username} and usersex= #{usersex}
</select>
Map 传参法
在 Mapper 动态代理中也可以使用 Map 作为传递参数的载体,在 SQL 语句中绑定参数 时使用 Map 的 Key 作为参数名即可。此方法适合在传递多参数时,如果没有 POJO 能与参数 匹配,可以使用该方式传递参数。推荐使用。 MyBatis 传递 map 参数时,如果传递参数中没有对应的 key 值,在执行 sql 语句时默认取的是 null
- 接口
List<Users> selectUsersMapParam(Map<String,String> map);
- mapper中
<!--根据用户姓名与性别查询用户,使用 Map 传参法-->
<select id="selectUsersMapParam" resultType="users">
select * from users where username = #{keyname} and usersex= #{keysex}
</select>
课后小tips
在 Mybatis 的映射配置文件中不可以使用一些特殊字符,如:<,>
可以用以下实体符号表示:
- <:<
- >:>
- &:&
- ':'
- ":"
也可以使用 CDATA 区
CDATA:全称为 Character Data,以"<![CDATA[ "内容" ]]>",CDATA 中的内容不会被解析程序解析。
<select id="selectUsers" resultType="users">
select * from users where userid <![CDATA[ > ]]> #{userid}
</select>