先上代码,先看下大概:

update tb_dm_shoping set uip='996' where userId in 
<if test="list!=null and list.size()>0">
    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
        #{item}
    </foreach>

1、collection: 代表遍历的对象。属性的值有三个分别是list、array、map三种,分别对应的参数类型为:List、数组、map集合

2、separator:分隔符,自动在元素之间添加“,”

3、item:表示在迭代过程中每一个元素的别名,可以代表 List、Arry、Map中的value值

4、index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选

5、open:开始符号

6、colse:结束符号

foreach的难点在用如何使用collection的值的问题,下面结合实际应用,我总结了一下,和大家做下分享

(1)当dao层传递参数是List<User>时,上述例子中的应改为:

dao层:
int updateById(List<User>)
mapper.xml:
<update id="updateById" parameterType="java.util.List">
  update tb_dm_shoping set uip='996' where userId in
   <if test="list!=null and list.size()>0">
     <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
        #{item.userId}
    </foreach>
</update>

(2)当dao层传递参数为多个参数时:

dao层:
int updateById(@Param("userList")List<User>,@Param("uip")String uip)
mapper.xml:
<update id="updateById" parameterType="java.util.List">
  update tb_dm_shoping set uip=#{uip} where userId in
   <if test="list!=null and list.size()>0">
     <foreach collection="userList" index="index" item="item" open="(" separator="," close=")">
        #{item.userId}
    </foreach>
</update>
@RequestMapping(value = "/findPage", method = RequestMethod.POST) @ResponseBody public Object findPage(@RequestParam(required=false) String jobCa... foreach 属性介绍foreach 用于迭代传入过来的参数。它的属性介绍分别是collection:表示传入过来的参数的数据类型。该参数为必选。要做 foreach 的对象,作为入参时,List 对象默认用 list 代替作为键,数组对象有 array 代替作为键,Map 对象没有默认的键。当然在作为入参时可以使用 @Param(“keyName”) 来设置键,设置 keyName 后,lis... 需要注意的是,为了避免 SQL 注入攻击,在将 List 集合作为参数传入 Mapper 方法时,建议使用 Java 的 Collection 接口或者数组类型,而不是采用字符串拼接的方式动态生成 SQL 语句。方法可以直接将 List 集合作为参数传入到 Mapper ,然后在 Mapper 的 XML 使用。标签实现单条数据的插入,但如果需要插入多条数据,则可以使用 Mybatis 提供的。标签遍历了 List 的每一个 User 对象,并将其属性插入到表。在 Mybatis ,可以使用。 我们学习了如何使用 Mybatisif、where、trim等动态语句来处理一些简单的查询操作。对于一些 SQL 语句含有 in 条件,需要迭代条件集合来生成的情况,可以使用 foreach 来实现 SQL 条件的迭代 Mybatis foreach 标签用于循环语句,它很好的支持了数据和 List、set 接口的集合,并对此提供遍历的功能。语法格式如下。 • <foreach item="item" index="index" collection="list|array|map key.. 1、标签foreach作用 编写mybatis的mapper.xml文件时,我们可使用<foreach>标签将数组或列表等数据类型动态生成适用于查找的sql语句。 例如将数据string[] ids= {'1','2','3'} 转换为 ('1','2','3') 2、标签foreach的主要属性 item:集合元素迭代时的别名,该参数为必选。 index:在list和数组,index是元素的序号,在map,index是元素的key,该参数可选 open:foreach代码的开始符号,一 一般我们在传递参数的时候,接口方法定义如User selByUP(String username, String password);则在xml文件可以使用如下代码获取参数select * from tb_user where username =#{param1} and password=#{param2}或者select * from tb_user where username =#{0... 最近对mybatis的in查询做优化时,看到一个有趣的方法,使用外部拼接好查询条件,然后用$符合,直接替代了mybatis内部foreach,特地在本地上做个评测 看到一篇文章,当foreach条件参数过多的时候,采用外部拼接的方式能提升mybatis,特地在本地做了个实验 in 查询条件为1000个,去驱动数据表查询 mysql语句 CREATE TABLE `workexperience` ( `id` int(11) NOT NULL AUTO_INCREMENT, foreach的主要用在构建in条件,它可以在SQL语句进行迭代一个集合。foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,cl... 此时还collection还是list类型的话就会出以下异常: Caused by: org.apache.ibatis.binding.BindingException: Parameter 'list' not found. Available parameters are [a, allid, param1, param2] at org.apache.ibatis.binding.MapperMethod$ParamMap.get(MapperMe 基本的多参数传递方式: xxxMapper.class public List<XXXBean> getXXXBeanList(String param1, String parm2); xxxMapper.xml <select id="getXXXBeanList" resultType="XXBean">   select t.* from tableN