MyBatis传递多个参数的方法

本文介绍了在SQL查询中通过三种不同的方式传递参数的方法:使用Map接口、使用注解和使用JavaBean。每种方法都有其特点,例如使用Map接口传递参数虽然适用范围广泛,但可读性和业务性较弱。
    我们在写SQL的时候经常需要通过接口传递参数,传递参数的时候,可以有一个或多个参数,比如订单可以通过订单编号查询,也可以通过订单名称、日期等查询。
而传递参数的时候我们有多个方法
1.使用map接口传递多个参数
2.使用注解传递多个参数
3.通过Java Bean传递多个参数

1.使用map接口传递多个参数
先介绍第一种方法,使用map接口传递多个参数。假设要通过角色名称(role_name)和备注(note)对角色进行模糊查询,这样就有两个参数了。在Dao的定义如下:

public List<Role> findRoleByMap(Map<String,Object> parameMap);
此时,传递给映射器的是一个map对象,使用它在SQL中的设置对应的参数,如下:
<select id="findRoleByMap" parameterType="map" resultType="role">
select * from t_role
where role_name like concat('%',#{roleName},'%')
and note like concat('%',#{note},'%')
在调用findRoleByMap接口的时候只需要传一个map集合就可以了,集合的内容一般为:
parameMap.put("roleName",1);
parameMap.put("note",1);
在SQL中的参数标识将会被这里设置的参数锁取代,这样就能够运行了。严格来说,map使用几乎所有场景,但是我们用的不多。原因有两个:1.map是一个键值对应得集合,使用者要通过阅读它的键,才能明白其作用。2.使用map不能限定其传递的参数类型,因此业务性质不强,可读性差,使用者要读懂代码才能知道需要传递什么数据。

2.使用注解传递多个参数
上面说的使用map传递参数可读性差,为此,mybatis开发者提供了一个注解@Param,可以通过它去定义映射器的参数名称,使用它可以得到更好的可读性,把接口方法定义为:

public List<Role> findRoleByMap(@Param("roleName") String rolename, @Param("note") String note);
此时代码可读性提高了,能够一眼看出需要传递什么参数,一目了然。
<select id="findRoleByMap" resultType="role">
select * from t_role
where role_name like concat('%',#{roleName},'%')
and note like concat('%',#{note},'%')
此时不需要给出parameterType属性,让mybatis自动探索即可。

3.通过Java Bean传递多个参数
先定义一个实体类RoleParams,如下:

public class RoleParams {
   private String roteName;
   private String note;
   /**get、set属性**/
}

接口定义为:

public List<Role> findRoleByBean(RoleParams roleParams);

映射文件定义如下:

<select id="findRoleByBean" parameterType="com.params.RoleParams" resultType="role">
select * from t_role
where role_name like concat('%',#{roleName},'%')
and note like concat('%',#{note},'%')

传递参数如下:

RoleParams roleParams = new RoleParams();
roleParams.setRoleName("1");
roleParams.setNote("1")

使用方法大致如上,以上方法可以混合使用,灵活性好,依据需求灵活变通。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值