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

本文介绍了MyBatis动态代理模式下处理多参数的方法,包括顺序传参法、@Param注解传参法、POJO传参法和Map传参法。顺序传参法可读性低,易出错;@Param注解法直观,适用于少量参数;POJO传参法推荐使用,直接使用对象属性名;Map传参法适合无对应POJO时,使用Map键值对传递。总结了各种方法的优缺点和适用场景。
摘要由CSDN通过智能技术生成

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿豆蛙给生活加点甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值