Mybatis多参数传值

Mybatis多参数传值@Param

Mapper接口:
在这里插入图片描述
Mapper.xml映射文件:
在这里插入图片描述

MyBatis使用in语句主要通过`<foreach>`标签实现,以下是不同场景下的方法: ### 单个参数(List) 当入单个List参数时,在Mapper XML文件中使用`<foreach>`标签遍历List元素。例如,要根据用户ID的集合来查询用户信息,假设Mapper文件名为`UserMapper.xml`,查询方法为`selectUsersByIds`: ```xml <select id="selectUsersByIds" resultType="User"> SELECT * FROM users WHERE id IN <foreach item="id" collection="list" open="(" separator="," close=")"> #{id} </foreach> </select> ``` 在这个例子中,`collection`属性为`list`,代表入的参数是一个List,`item`属性定义了List中每个元素的别名,在`#{}`中使用该别名获取元素,`open`、`separator`和`close`分别定义了遍历开始、元素分隔和结束的符号[^4]。 ### 多参数(List和其他类型) 当需要入多个参数,其中包含List和其他类型参数时,有两种常见的处理方式: #### 方式一:使用Map递参数 在DAO接口中定义方法时,参数类型为`Map<String, Object>`,在调用方法前将参数存入Map。例如: ```java // DAO部分 public void deleteBooks(Map<String, Object> map); // 调用示例 Map<String, Object> map = new HashMap<>(); map.put("partnerId", 12L); map.put("templist", list); ``` 在Mapper XML文件中使用严格匹配Map中`put`的`key`来获取参数: ```xml <delete id="deleteBooks"> delete from cp.tbl_cp_partner_books where partner_id = #{partnerId} and book_id in <foreach collection="templist" index="index" item="item" open="(" separator="," close=")"> #{item.bookId} </foreach> </delete> ``` 这里`collection`属性为`"templist"`,对应Map中存储List的`key`,`#{item.bookId}`表示获取List中对象的`bookId`属性[^3]。 #### 方式二:使用@Param注解 在DAO接口方法的参数前使用`@Param`注解指定参数名,在Mapper XML文件中使用注解指定的参数名获取参数。例如: ```java // DAO部分 public void deleteBooks(@Param("partnerId") long partnerId, @Param("templist") List<CPPartnerBookSet> list); ``` Mapper XML文件与方式一相同: ```xml <delete id="deleteBooks"> delete from cp.tbl_cp_partner_books where partner_id = #{partnerId} and book_id in <foreach collection="templist" index="index" item="item" open="(" separator="," close=")"> #{item.bookId} </foreach> </delete> ``` 需要注意的是,如果入的List为空,可能会导致SQL语法错误,因此要确保List中有对象[^3]。 ### 从Map中获取List参数 当入的参数是一个Map,需要从Map中获取List作为`in`语句的参数时,同样使用`<foreach>`标签。例如,查询商品列表,参数为一个Map,其中包含商品ID的List: ```xml <select id="queryCouponCommodity" parameterType="java.util.Map" resultMap="commodityDetailResultMap"> SELECT commodity_id, commodity_name, tag_pic, cover, price FROM bk_commodity WHERE commodity_id IN <foreach collection="commodityIds" item="paramItem" open="(" separator="," close=")"> #{paramItem} </foreach> AND yn = 1 order by modify_time desc </select> ``` 这里`collection`属性为`"commodityIds"`,表示从入的Map中获取名为`commodityIds`的List作为`in`语句的参数[^2]。 ### 直接List 在某些情况下,也可以直接入List作为参数,在Mapper XML文件中使用`<foreach>`标签处理。例如: ```xml <select id="queryByIds" resultType="YourEntity"> SELECT * FROM your_table WHERE id IN <foreach item="idItem" collection="delIds" open="(" separator="," close=")"> #{idItem} </foreach> </select> ``` 这里`collection`属性为`"delIds"`,表示入的List参数名,`#{idItem}`获取List中的元素[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值