Mybatis框架中List参数的高效处理方式解析,本文将详细介绍两种典型场景下的实现方案。
数据库建表语句如下:

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');
对应的实体类定义:
public class StudentInfo {
private Integer id;
private String name;
private Integer age;
// 省略 get、set 方法
}
演示两种不同List参数类型的查询实现:
DAO层接口定义:
/**
* 通过年龄列表和名称模糊查询
* @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);
Mapper映射文件配置:
SELECT * FROM tb_student
WHERE name LIKE CONCAT('%',#{name},'%')
AND age IN
#{age}
SELECT * FROM tb_student
WHERE name LIKE CONCAT('%',#{name},'%')
AND age IN
#{studentInfo.age}
掌握Mybatis处理List参数的技巧能显著提升开发效率,本文介绍的两种方案可满足大多数实际业务场景需求。