xml中的sql语句foreach字段

  1. foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
  2. foreach元素的属性主要有 item,index,collection,open,separator,close。
  • item表示集合中每一个元素进行迭代时的别名
  • index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置
  • separator表示在每次进行迭代之间以什么符号作为分隔符
  • open表示该语句以什么开始
  • close表示以什么结束。

在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

  • 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
  • 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
  • 如果传入的参数是Map的时候,collection 的属性值为map 的key值
  • 当使用可迭代对象或者数组时,index 是当前迭代的次数,item 的值是本次迭代获取的元素。
  • 当使用 Map 对象(或者 Map.Entry对象的集合)时,index 是键,item 是值。
    **

举例说明

**

  1. 单参数List类型
List idList =new ArrayList();
idList.add(1);
idList.add(2);
idList.add(3);
List list = alarmService.list(idList); 

map.xml :
select * from vehicle where id in
<foreach item="id" collection="list" open="(" separator="," close=")">
        #{id}
</foreach>

2、传入的值为array

int[] arr  = new int[] {1,3,6,9};
List list = alarmService.list(arr ); 

map.xml :
select * from vehicle where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
        #{id}

3、传入的参数为map

List list =new ArrayList();
 list.add(1);
 list.add(2);
 Map params =new HashMap();
 params.put("vehicleIdList",list);
List alarmList =alarmService.list(params);

map.xml :
<if test="vehicleIdList != null ">and vehicle_id in 
 <foreach item="id" collection="vehicleIdList" open="(" separator="," close=")"> #{id} </foreach> 
</if>

xml文件,可以使用多种标签和语法来编写SQL语句。其常用的标签包括: 1. if标签:用于条件判断,根据条件动态生成SQL语句的一部分。 2. where标签:用于生成WHERE子句,多个条件可以使用AND或OR连接。 3. choose、when、otherwise标签:类似于if-else语句,根据条件选择不同的SQL语句块。 4. set标签:用于生成UPDATE语句的SET部分,根据条件动态设置更新的字段。 5. foreach标签:用于循环操作,可以遍历集合或数组,并生成相应的SQL语句。 通过以上标签的组合和嵌套,可以实现复杂的SQL语句拼接和动态生成。 以下是一个示例代码,展示了在xml文件使用上述标签的情况: ```xml <select id="getStudentCount" parameterType="java.util.Map" resultType="java.util.Map"> select COUNT(*) count from student <where> <if test="record.ids != null"> and id in <foreach item="item" index="index" collection="record.ids" open="(" separator="," close=")"> #{item} </foreach> </if> </where> </select> ``` 在这个例子,使用了if条件判断和foreach循环标签,根据条件动态生成了一个带有WHERE子句的SELECT语句。当record对象的ids属性不为空时,会生成形如"and id in (value1, value2, ...)"的SQL语句。这种灵活的动态SQL语法,使得在xml文件编写复杂的SQL语句变得更加方便和可读性更高。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mybatis PlusXML文件使用自定义的sql语句](https://blog.csdn.net/weixin_33074719/article/details/123480593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [myBatis xml文件SQL编写( if、where、if-else、set 、foreach )](https://blog.csdn.net/baidu_41847368/article/details/114593640)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值