Mybatis传递多个参数的几种方式

本文详细介绍了Mybatis中传递多个参数的五种方法,包括顺序传参法、@Param注解法、Map传参法、Java Bean传参法以及特殊情况下的处理方式。对于不同参数数量和类型,提供了灵活的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis传递多个参数的几种方式:

方法1:顺序传参法

public User selectUser(String name, int age);

<select id="selectUser" resultMap="UserResultMap">
    select * from user
    where user_name = #{0} and user_age= #{1}
</select>

#{}里面的数字代表你传入参数的顺序

这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。

 

方法2:@Param注解传参法

public User selectUser(@Param("userName") String name, @Param("userAge") int age);

<select id="selectUser" resultMap="UserResultMap">
    select * from user
    where user_name = #{userName} and user_age= #{userAge}
</select>


#{}里面的名称对应的是注解@Param括号里面修饰的名称

这种方法在参数不多的情况还是比较直观的,推荐使用。

 

方法3:Map传参法

把接口的形参改为Map

// 接口
public interface UserMapper {
    public User selectUser(Map<String, Object> params);
}

 把需要的参数封装在map中

Map params = new HashMap();
params.put("userName", "lelly110");
params.put("age", 32);

XMl查询

<select id="selectUser" parameterType="java.util.Map" resultMap="UserResultMap">
    select * from user
    where user_name = #{userName} and user_age= #{age}
</select>


#{}里面的名称对应的是Map里面的key名称。

这种方法适合传递多个参数,且参数易变能灵活传递的情况。

方法4:Java Bean传参法

//实例化user对象并赋值

private String userName;

private int age;

User user = new User();

user.setUserName = "123";

user.setAge = 22;
//接口方法

public User selectUser(User user);
//xml查询

<select id="selectUser" parameterType="com.test.User" resultMap="UserResultMap">
    select * from user
    where user_name = #{userName} and user_age= #{age}
</select>

#{}里面的名称对应的是User类里面的成员属性

这种方法很直观,但需要建一个实体类,扩展不容易,需要加属性,看情况使用。

方法五:

selectList()只能传递一个参数,但实际所需参数既要包含String类型,又要包含List类型时的处理方法:

将参数放入Map,再取出Map中的List遍历。如下:

List<String> list_3 = new ArrayList<String>(); Map<String, Object> map2 = new HashMap<String, Object>(); list.add("1");

list.add("2");
map2.put("list", list); //网址id

map2.put("siteTag", "0");//网址类型

 
public List<SysWeb> getSysInfo(Map<String, Object> map2) {
  return getSqlSession().selectList("sysweb.getSysInfo", map2);
}
<select id="getSysInfo" parameterType="java.util.Map" resultType="SysWeb"> 
  
    select 
        t.sysSiteId, t.siteName, t1.mzNum as siteTagNum, t1.mzName as siteTag, t.url, t.iconPath 
    from TD_WEB_SYSSITE t left join TD_MZ_MZDY t1 on t1.mzNum = t.siteTag and t1.mzType = 10 
    WHERE t.siteTag = #{siteTag } 

    and t.sysSiteId 

    not in 

    <foreach collection="list" item="item" index="index" open="(" close=")" 

separator=","> #{item} 

    </foreach> 

</select>

拓展(接口中传入参数的各种情况)

5.1 当只有一个参数时

使用arg0,param1获得参数是一直有效的,但是个人不推荐这样做,毕竟看起来不优雅


5.1.1 参数是基本类型

xml中标签内的变量名可以随便写,#{id},#{ids},#{123},#{xxgdsgdg},等都可以获得到参数。

5.1.2 参数是javabean

xml中标签内直接填写Javabean中的属性名

5.1.3 参数是数组

使用array获得参数,再用foreach循环

5.1.4 参数是List

使用list或collection获得参数,再用foreach循环

5.1.5 参数是Set

使用collection获得参数,再用foreach循环

5.2 当有多个参数时

使用argN、paramN或@param定位到某个参数,再使用ognl就ok了。比如#{user.name}、#{users[0].name}。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值