这是一个比较低级的问题,但某些不懂得这个特点的,去解决就会南辕北辙去更改List的类型与mybatis返回值等,其实大可不必,如果在调用mybatis时加入集合参数时已经做了判空操作,那么就不用去考虑这个集合是否为空的,很有可能是子查询里面没有访问成功。
foreach的集合只会对同一层的查询起入参作用,不能用在子查询里面入参,除非把foreach放进子查询才可以。
例如:(正常引用)
SELECT * FROM table_a
WHERE user_name in
<foreach collection="userList" item="user" separator="," open="(" close=")">
#{user.name}
</foreach>
这句SQL就是正常情况,而下面这个:(错误引用)
<foreach collection="userList" item="user" separator="," open="(" close=")">
SELECT * FROM table_a as a
WHERE a.key_id IN
(
SELECT key_id FROM table_b AS b
WHERE b.user_name IN #{user.name}
)
</foreach>
此时会找不到user这个对象,所以报空指针异常,所以要注意foreach放置的位置,避免低级错误。