MyBatis<forEach>标签的使用

    • 你可以传递一个 List 实例或者数组作为参数对象传给 MyBatis。当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中,用名称作为键。List 实例将会以“list”作为键,而数组实例将会以“array”作为键。
    • foreach元素的属性主要有 item,index,collection,open,separator,close。 
      • item表示集合中每一个元素进行迭代时的别名,
      • index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
      • open表示该语句以什么开始,
      • separator表示在每次进行迭代之间以什么符号作为分隔符,
      • close表示以什么结束。
    • 在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:

      • 1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

      • 2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

      • 3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map或者Object。

entity实体类

public class QueryVo(){
private User user;
private UserCustom userCustom;
private List<integer> ids;
}

Mapper

<select id="find" parameterType="qo" resultMap="userResult">
select * from `user`
<where>
<foreach collection="ids" open=" and id in(" close=")"
item="id" separator=",">
#{id}
</foreach>
</where>
limit 0,10
</select>

测试代码

@Test
public void testFindByForeach(){
UserDaoImpl dao = new UserDaoImpl();
QueryObject queryObject = new QueryObject();
List<String> ids = new ArrayList<>();
ids.add("93365508879156507BA5FA7AD34ED9A10DC876DCC6BE7E08548587");
ids.add("93365566961612F12AF562B60641B8964B99202A80720834031994");
ids.add("9336561173424758F5F3B93D804D55AF41DE49B86EDE8D31235175");
ids.add("2222");
ids.add("111");
queryObject.setIds(ids);
List<User> userList = dao.find(queryObject);
System.out.println(userList);
}

直接传递单个List

    • 传递List类型在编写mapper.xml没有区别,唯一不同的是只有一个List参数时它的参数名为list。
<select id="selectByList" parameterType="java.util.List" resultType="user">
select * from user
<where>
<!-- 传递List,List中是pojo -->
<if test="list!=null">
<foreach collection="list" item="item" open="and id in("separator=","close=")">
#{item.id}
</foreach>
</if>
</where>
</select>

传递单个数组(数组中是pojo):

<!-- 传递数组综合查询用户信息 -->
<select id="findByArray" parameterType="Object[]" resultType="user">
select * from user
<where>
<!-- 传递数组 -->
<if test="array!=null">
<foreach collection="array" index="index" item="item" open="and id in("separator=","close=")">
#{item.id}
</foreach>
</if>
</where>
</select>

装载自:https://blog.csdn.net/m0_37204491/article/details/71436872

mybatis <forEach>标签的使用的更多相关文章

  1. Mybatis foreach标签含义

    背景 考虑以下场景: InfoTable(信息表): Name Gender Age Score 张三 男 21 90 李四 女 20 87 王五 男 22 92 赵六 女 19 94 孙七 女 23 ...

  2. MyBatis foreach标签遍历数组

    有时候开发中需要根据多个ID去查询,可以将ID封装为List或者数组然后使用MyBatis中的foreach标签构建in条件. 这里我将ID封装为String[]作为参数. <select id ...

  3. mybatis foreach标签

    一.批量插入数据 示例:添加订单商品表 1.模型层的相应代码 /** * 添加订单商品表 * @param ordergoods * @return */ public boolean addOrde ...

  4. MyBatis foreach标签的用法

    From<MyBatis从入门到精通> 一.foreach实现in集合 1.映射文件中添加的代码: <!-- 4.4 foreach用法 SQL语句有时会使用IN关键字,例如id i ...

  5. mybatis foreach标签的解释 与常用之处

    情景:查询数据库中文章的相关文章   文章为一个表 字段tags为相关文章字符串中间用','逗号进行啦分割 查询完一个文章后可以把tags字段构造为一个List<String> 然后利用这 ...

  6. Mybatis批量insert 返回主键值和foreach标签详解

    Mybatis批量insert 返回主键 Mybatis从3.3.1版本开始,支持批量插入后返回主键ID.首先对于支持自增主键的数据库使用useGenerateKeys和keyProperty,对于不 ...

  7. mybatis <where>、<set>、<trim>、<sql>、<foreach>标签的使用

    转:http://www.cnblogs.com/lixiujie/p/5766669.html <resultMap>标签的使用:这个类似于hibernte用于映射我们创建的vo对象与数 ...

  8. MyBatis的Mapper文件的foreach标签详解

    MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis M ...

  9. mybatis的foreach标签

    今天写sql发现了一点问题,乱弄了好久算是搞定了.关于mybatis的批量插入使用foreach插入形式为: insert into role_privilege( role_id, privileg ...

随机推荐

  1. Windows之CMD查看系统信息

    Windows 系统通过命令行(CMD)查询系统信息有两种方式: 1.图形化界面: 在“运行”中键入CMD,然后输入 dxdiag,回车后弹出图形化界面 ------ DirectX 诊断工具. 2. ...

  2. 一道Java集合框架题

    问题:某班30个学生的学号为20070301-20070330,全部选修了Java程序设计课程,给出所有同学的成绩(可用随机数产生,范围60-100),请编写程序将本班各位同学的成绩按照从低到高排序打 ...

  3. <Android 基础(十)> FloatingActionButton

    介绍 Source Code中的介绍如下: Floating action buttons are used for a special type of promoted action. They a ...

  4. 安装Android模拟器Genymotion【Android学习入门】

    安装Android模拟器Genymotion 推荐教程:一个强大的Android模拟器Genymotion具体内容如下: 相信很多Android开发者一定受够了速度慢.体验差效率及其地下的官方模拟器了 ...

  5. 【从业余项目中学习2】C# 实现调用Matlab函数(Visual Studio:2008, Matlab:R2009a)

    最近正在给客户做的个人项目,要求实现C#与Matlab之间的调用,即C# winform界面收集用户输入的参数,将参数传递给Matlab的算法计算,Matlab函数返回的结果显示在winform界面上 ...

  6. u-boot分析(三)---boot命令实现以及内核的启动

    上片博文总结出了u-boot的工作流程,今天我们来分析,u-boot的两个比较重要的内容 1.        U-boot命令的实现 2.        U-boot如何启动内核 l  命令实现 我们 ...

  7. 在unbuntu 1204(32位)下安装hadoop2.2.0的一些问题

    虽然在网上可以找到很多这样的step by step的教程,但是我还是遇到了很多问题.趁着一点记忆,将这些问题记录下来.安装过程参考了以下博客: http://www.cnblogs.com/life ...

  8. Struts2_HelloWorld1

    打开 eclipse,新建 web 项目. 因为可能需要 jstl 表达式,所以添加 jstl需要的jar包. 下载链接:http://pan.baidu.com/s/1hr6mBI0 将jar拷贝至 ...

  9. 笨办法学Python(三十)

    习题 30: Else 和 If 前一习题中你写了一些 “if 语句(if-statements)”,并且试图猜出它们是什么,以及实现的是什么功能.在你继续学习之前,我给你解释一下上一节的加分习题的答 ...

  10. To my dear friends in SFAE

    To my dear friends in SFAE, 这不是farewell,我还在西门子大家庭.2018年1月份我会转到SLC MCBU.在SFAE十年,一些敢想,唠叨唠叨~ 十年弹指一挥间.记得 ...