IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MyBatis中foreach使用 -> 正文阅读

[大数据]MyBatis中foreach使用

目录

1.foreach中的属性说明

2.collection属性的详细说明

3.示例

(1).传入的是单参数且参数类型是一个List

(2).传入的是单参数且参数类型是一个array数组

(3).传入的参数是实体类,并且实体中包含数组和集合

(4).传入多个list或者array,不使用实体进行封装。

4.总结


1.foreach中的属性说明

  • item:集合中元素迭代时的别名,该参数为必选,通过别名进行取值。
  • index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选
  • open:foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选
  • separator:元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。
  • close:?foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。
  • collection:?要做foreach的对象,作为入参时,List对象默认用"list"代替作为键,数组对象有"array"代替作为键,实体类作为参数对象的时候。举个例子:如果User有属性List ids。入参是User对象,那么这个collection = "ids".如果User有属性Ids ids;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = "ids.id"

2.collection属性的详细说明

  • 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .
  • 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .
  • 如果传入的参数是一个实体的场合,假如实体中有list也有array,当需要使用list的场合,collection的属性值为list的id,当需要使用array的场合,collection的属性值为array的id,详细的可以参照下面的例子

3.示例

(1).传入的是单参数且参数类型是一个List

mapper接口

    /**
     * @param bmsBillMemoList
     * @return
     */
    public int insertBatchMemo(List<BmsBillMemo> bmsBillMemoList);

映射文件

    <insert id="insertBatchMemo">
        insert into bms_bills_memo(
        supplier_id,
        supplier_name,
        client_id,
        client_name,
        client_short_name,
        currency,
        exchange_rate,
        consignment_id,
        bill_of_lading_no,
        expense_id,
        expense_name,
        unit_price_contain_tax,
        unit_price,
        amounts,
        tax_rate,
        tax,
        total_contain_rate,
        total,
        contains_count,
        is_locked,
        belonging_to_date,
        memo_type,
        charge_desc,
        payment_type,
        create_by,
        create_time)
        values
        <foreach collection="list" item="detail" separator=",">
            ( #{detail.supplierId},#{detail.supplierName}, #{detail.clientId},
            #{detail.clientName},#{detail.clientShortName},#{detail.currency},
            #{detail.exchangeRate},#{detail.consignmentId},#{detail.billOfLadingNo},
            #{detail.expenseId},#{detail.expenseName},#{detail.unitPriceContainTax},
            #{detail.unitPrice},#{detail.amounts},#{detail.taxRate},
            #{detail.tax},#{detail.totalContainRate},#{detail.total},
            #{detail.containsCount},#{detail.isLocked},#{detail.belongingToDate},
            #{detail.memoType},#{detail.chargeDesc},#{detail.paymentType},
            #{detail.createBy},#{detail.createTime}
            )
        </foreach>
    </insert>

入参只有一个且是list类型,collection设置为list。

(2).传入的是单参数且参数类型是一个array数组

mapper接口

    /**
     * 批量删除结算账单手账
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBmsBillMemoByIds(Long[] ids);

映射文件


    <delete id="deleteBmsBillMemoByIds" >
        delete from bms_bills_memo where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>

入参只有一个且是数组的场合,collection设置为array。

(3).传入的参数是实体类,并且实体中包含数组和集合

入参的实体类

package com.example.demo.domain;

import lombok.Data;

import java.util.List;

/**
 * @author linaibo
 * @version 1.0
 * Create by 2022/12/20 15:07
 */
@Data
public class selectVo {

    private Long id;

    private Long supplierId;

    private Long[] ids;

    private List<Long> clientIdList;

}

mapper接口

    public List<BmsBillMemo> listMemo(selectVo select);

映射文件

    <select id="listMemo" resultType="com.example.demo.domain.BmsBillMemo">
        select *
        from bms_bills_memo
        <where>
        and id in
        <foreach collection="ids" open="(" close=")" item="detail" separator=",">
            #{detail}
        </foreach>
        and
        client_id in
        <foreach collection="clientIdList" separator="," item="detail" open="(" close=")" >
            #{detail}
        </foreach>
        </where>
    </select>

传入的参数是实体类,并且实体中包含数组和集合,使用list的场合,collection的内容是是list的id,即clientIdList,使用array的场合,collection的内容是是array的id,即ids

(4).传入多个list或者array,不使用实体进行封装。

mapper接口

    public  List<BmsBillMemo> listMemo1(@Param("idArray") Long[] array, @Param("clientIdList") List<Long> list);

?映射文件

    <select id="listMemo1" resultType="com.example.demo.domain.BmsBillMemo">
        select *
        from bms_bills_memo
        <where>
            and id in
            <foreach collection="idArray" open="(" close=")" item="detail" separator=",">
                #{detail}
            </foreach>
            and
            client_id in
            <foreach collection="clientIdList" separator="," item="detail" open="(" close=")" >
                #{detail}
            </foreach>
        </where>
    </select>

collection需要使用到Param中定义的别名。

4.总结

以上几种比较常见,如果在mapper接口中添加@Param注解的场合,list,array将会失效,collection的内容需要使用Param中的别名来指定你需要用到的list或者array,这个需要注意,一般在只有一个参数的场合,没有必要使用Param注解。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:16:02  更:2022-12-25 11:20:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 12:14:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码