0
点赞
收藏
分享

微信扫一扫

Mybatis系列笔记——Mapper动态代理模式下的多参数处理

寒羽鹿 2022-02-21 阅读 79

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 的映射配置文件中不可以使用一些特殊字符,如:<,>
可以用以下实体符号表示:

  • <:&lt;
  • >:&gt;
  • &:&amp;
  • ':&apos;
  • ":&quot;

也可以使用 CDATA 区
CDATA:全称为 Character Data,以"<![CDATA[ "内容" ]]>",CDATA 中的内容不会被解析程序解析。

<select id="selectUsers" resultType="users"> 
	select * from users where userid <![CDATA[ > ]]> #{userid} 
</select>
举报

相关推荐

0 条评论