文章目录
>Mybatis传入参数为List对象时(foreach的用法/批量插入)
- 场景复现
首先有如下一张表:
MySQL [test]> select * from t_entry_resource;
+----+-------------+------+----------+--------+--------+---------------------+
| id | resource_id | type | title | banner | icon | add_date |
+----+-------------+------+----------+--------+--------+---------------------+
| 11 | 6 | 14 | 分类 | 1.jpg | 2.jpg | 2017-11-17 11:22:30 |
| 12 | 3 | 1 | 测试12 | 3.jpg | 4.jpg | 2017-11-17 11:22:30 |
| 13 | 653 | 1 | 测试34 | 5.jpg | 6.jpg | 2017-11-20 02:32:26 |
| 14 | 1 | 1 | 测试5 | 7.jpg | 8.jpg | 2017-11-20 02:32:51 |
| 15 | 3942 | 3 | 测试6 | 9.jpg | 10.jpg | 2017-11-20 02:34:27 |
+----+-------------+------+----------+--------+--------+---------------------+
5 rows in set (0.01 sec)
如果要根据resource_id和type来批量查询记录,该如何编写Mybatis语句?
2. 解决方案
直接贴出来解决方案如下所示:
Dao层接口:
List<EntryResource> findByRidAndType(List<EntryResource> entryResources);
XML语句:
<select id="findByRidAndType" resultMap="entryResource" parameterType="list">
SELECT
*
FROM
t_entry_resource a
WHERE
<foreach collection="list" index="index" item="entryResources" open="(" close=")" separator="or">
( `type`=#{entryResources.type} and resource_id=#{entryResources.resourceId} )
</foreach>
</select>
该语句利用了mybatis的foreach动态拼接SQL。
还有批量插入:
int insertBatch(@Param("list") List<AlarmDispose> disposeList);
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.boot.reservation.mapper.AlarmDisposeMapper">
<sql id="tableName">
alarm_dispose
</sql>
<sql id="baseColumn">
id,alarm_inform_id,dispose_opinion,dispose_explain,dispose_person,accessory,picture,dispose_time,valid
</sql>
<insert id