发布于2026-05-30 阅读(0)
扫一扫,手机访问
在日常开发中,处理List参数是Mybatis里非常常见的需求——很多时候我们需要根据一组值(比如多个年龄)来查询,或者从一批实体对象中提取某些属性作为查询条件。这两类场景看似简单,但传参时的写法稍有不同就容易踩坑。下面就用两个典型示例,把List参数的用法一次说清楚。
首先准备好一张学生表 tb_student,结构如下:

CREATE TABLE `tb_student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_bin NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC;
INSERT INTO `work`.`tb_student` (`id`, `name`, `age`) VALUES ('25', ' Ben ', '23');
INSERT INTO `work`.`tb_student` (`id`, `name`, `age`) VALUES ('26', 'Jack', '24');
INSERT INTO `work`.`tb_student` (`id`, `name`, `age`) VALUES ('27', 'Tom', '24');
INSERT INTO `work`.`tb_student` (`id`, `name`, `age`) VALUES ('28', 'Jerry', '19');
INSERT INTO `work`.`tb_student` (`id`, `name`, `age`) VALUES ('29', 'Lilian', '18');
对应的实体类 StudentInfo:
public class StudentInfo {
private Integer id;
private String name;
private Integer age;
// 省略 get、set 方法
}
下面通过两种不同类型的List参数,演示不同的查询写法。
StudentDao 中的方法声明:
/**
* 通过年龄和名称查询结果
* @param ages
* @param name
* @return
*/
List getListByAgesAndName(@Param("ages") List ages, @Param("name") String name);
/**
* 通过年龄【实体中获取】和名称查询结果
* @param studentInfos
* @param name
* @return
*/
List getListByStudentInfoAndName(@Param("studentInfos") List studentInfos, @Param("name") String name);
StudentMapper.xml 中的映射配置:
第一个方法直接传入年龄List,配合模糊查询姓名;第二个方法传入学生实体List,在foreach中通过 #{studentInfo.age} 取出每个实体的年龄字段。两种方式的foreach标签用法完全一致,只是item属性的取值路径不同。
以上就是Mybatis处理List参数的核心用法:无论是基本类型的List,还是实体对象的List,都可以通过标签轻松实现动态IN查询。关键点在于collection属性要匹配@Param指定的名称,item属性决定了后续如何引用元素值。理解了这个套路,以后碰到类似的批量查询场景就能举一反三了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8