转自:
下文讲述MyBatis中foreach标签的相关功能
MyBatis foreach标签的功能
用于实现sql 语句中的in 条件中的内容
Mybatis中foreach标签可以很好的支持List、set接口的集合
foreach语句如下所示:
参数值
foreach标签中常用的属性值说明:
属性值 | 功能 |
item | 设置集合中每一个元素进行迭代时的别名 |
index | 指定一个名字,表示在迭代过程中每次迭代到的位置 |
open | 设置该语句以什么开始(既然是 in 条件语句,所以必然以(开始) |
separator | 设置在每次进行迭代之间以什么符号作为分隔符(既然是 in 条件语句,所以必然以,作为分隔符) |
close | 设置该语句以什么结束(既然是 in 条件语句,所以必然以)开始) |
foreach标签注意事项: 使用foreach标签时,大家一定要注意collection属性, 此属性必须输入,此属性值可放入以下三种类型 一、传入的是单参数且参数类型是一个 List,collection 属性值为 list。 二、传入的是单参数且参数类型是一个 array 数组,collection 的属性值为 array。 三、传入的参数是多个,需要把它们封装成一个 Map,当然单参数也可以封装成 Map。 Map 的 key 是参数名,collection 属性值是传入的 List 或 array 对象在自己封装的 Map 中的 key
例 下文将基于 User表,进行相应的查询操作 user表的内容如下:
id | name | notes |
1 | 王二 | 哈哈 |
2 | 张三 | 喜喜 |
3 | 里斯 | 莉莉 |
UserMapper.xml
UserInfoMapper 类
public ListselectUserInfo(List idList);
测试代码
public class Test { public static void main(String[] args) throws IOException { // 读取配置文件mybatis-config.xml InputStream config = Resources.getResourceAsStream("mybatis-config.xml"); // 根据配置文件构建 SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config); // 通过SqlSessionFactory创建SqlSession SqlSession ss = ssf.openSession(); ListidList = new ArrayList (); idList.add(1); idList.add(3); List userList = ss.selectList("com.java265.mapper.UserInfoMapper.selectUserInfo", idList); for (UserInfo t : userList) { System.out.println(t); } } }
输出结果---
DEBUG [main] - ==> Preparing: SELECT id,name,notes FROM userInfo WHERE id in ( ? , ? )
DEBUG [main] - ==> Parameters: 10(Integer), 12(Integer)
DEBUG [main] - <== Total: 2
UserInfo[id=1,name=王二,notes=哈哈]
UserInfo[id=3,name=里斯,notes=莉莉]