foreach一共有三种类型,分别为List,[](array),Map三种。
foreach的第一篇用来将List和数组(array)。
下面表格是我总结的各个属性的用途和注意点。
下面是测试。
SQL
[sql] view plain copy drop table users if exists; create table users ( id int, name varchar(20) ); insert into users (id, name) values(1, 'User1'); insert into users (id, name) values(2, 'User2'); insert into users (id, name) values(3, 'User3'); insert into users (id, name) values(4, 'User4'); insert into users (id, name) values(5, 'User5'); insert into users (id, name) values(6, 'User6');
User类
Mapper.xml
[html] view plain copy <select id="countByUserList" resultType="_int" parameterType="list"> select count(*) from users <where> id in <foreach item="item" collection="list" separator="," open="(" close=")" index=""> #{item.id, jdbcType=NUMERIC} </foreach> </where> </select> 测试代码:
[java] view plain copy @Test public void shouldHandleComplexNullItem() { SqlSession sqlSession = sqlSessionFactory.openSession(); try { Mapper mapper = sqlSession.getMapper(Mapper.class); User user1 = new User(); user1.setId(2); user1.setName("User2"); List<User> users = new ArrayList<User>(); users.add(user1); users.add(null); int count = mapper.countByUserList(users); Assert.assertEquals(1, count); } finally { sqlSession.close(); } } 测试日志:
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. DEBUG [main] - Opening JDBC Connection DEBUG [main] - Setting autocommit to false on JDBC Connection [org.hsqldb.jdbc.JDBCConnection@4b83b34e] DEBUG [main] - Resetting autocommit to true on JDBC Connection [org.hsqldb.jdbc.JDBCConnection@4b83b34e] DEBUG [main] - Closing JDBC Connection [org.hsqldb.jdbc.JDBCConnection@4b83b34e] DEBUG [main] - Opening JDBC Connection DEBUG [main] - Setting autocommit to false on JDBC Connection [org.hsqldb.jdbc.JDBCConnection@763d1932] DEBUG [main] - ==> Preparing: select count(*) from users WHERE id in ( ? , ? ) DEBUG [main] - ==> Parameters: 2(Integer), null DEBUG [main] - <== Total: 1 DEBUG [main] - Resetting autocommit to true on JDBC Connection [org.hsqldb.jdbc.JDBCConnection@763d1932] DEBUG [main] - Closing JDBC Connection [org.hsqldb.jdbc.JDBCConnection@763d1932]
上面这个例子是List的,但是和数组的情况基本一样,所以不针对数组进行测试了。可以看到这个例子的内容是很简单的,实际上List,array,map也可以互相嵌套,可以用多个foreach去执行,如果想看这样一个例子,可以移步这里:
新人求解问题哦,被卡了两天了,悲伤..
上面这个问题就遇到了list,map一起用的问题,3楼是问题的答案,可以参考一看。
由于map的key,value比较特殊,所以下次再说。