先上代码,先看下大概:
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