Notes-Mybatis中foreachcollection的用法-《Java笔记》

admin 2025-10-19 04:03:12 编程 来源:ZONE.CI 全球网 0 阅读模式

Java Mybatis

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了,当然单参数也可

    案例例子

    一、通过id获取多条数据

    List 类型的都配置了别名list,参数是 List<Article> ,Article 是自己定义的实体类
    1. <!-- 获取标签文章列表 -->
    2. <select id="getArticleList" parameterType="list" resultType="pm">
    3. SELECT * from blog_article a where a.article_id in
    4. <foreach item="item" collection="list" index="index" open="(" separator="," close=")">
    5. #{item.article_id}
    6. </foreach>
    7. and isdel = 0
    8. order by a.create_time desc,a.update_time desc
    9. </select>

    二、批量插入数据

    1. <!-- 批量新增-->
    2. <insert id="batchSaveArticleLabel" parameterType="list">
    3. insert into blog_article_label( article_id, label_id ) values
    4. <foreach collection="list" item="item" index="index" separator="," >
    5. ( #{item.article_id}, #{item.label_id} )
    6. </foreach>
    7. </insert>

    三、对一个字段进行多次模糊匹配

    1. select * from table
    2. <where>
    3. <foreach collection="list" item="item" index="index" separator="or">
    4. name like '%${item}%'
    5. </foreach>
    6. </where>
    上面的参数都是 List,如果是 String[] 这种的就是把collection 的值改为array,如下demo

    四、批量删除

    1. <delete id="getArticleList" parameterType="String">
    2. DEKETE from blog_article a
    3. where a.article_id in
    4. <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
    5. #{item}
    6. </foreach>
    7. </delete>

    五、批量修改

    参数是 Map<String,Object> ,下面写map 是因为配置了别名Java 代码是这样的:
    1. Map<String,Object> map = new HashMap<>();
    2. String[] ids = {"1","2","3"};
    3. map.put("content","修改的内容");
    4. map.put("ids",ids);
    mapper 文件
    1. <update id="update" parameterType="map">
    2. UPDATE table
    3. SET content="#{content}"
    4. WHERE id in
    5. <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
    6. #{item}
    7. </foreach>
    8. </update>

    还有一种

    1. <update id="updateUserChildNum" parameterType="list">
    2. UPDATE usr_relation_umbrella
    3. SET child_number = CASE user_id
    4. <foreach collection="list" item="item">
    5. WHEN #{item.userId} THEN #{item.childNumber}
    6. </foreach>
    7. END
    8. WHERE user_id IN
    9. <foreach item="item" collection="list" index="index" open="(" separator="," close=")">
    10. #{item.userId}
    11. </foreach>
    12. </update>

    多个

    1. UPDATE categories
    2. SET display_order = CASE id
    3. WHEN 1 THEN 3
    4. WHEN 2 THEN 4
    5. WHEN 3 THEN 5
    6. END,
    7. title = CASE id
    8. WHEN 1 THEN 'New Title 1'
    9. WHEN 2 THEN 'New Title 2'
    10. WHEN 3 THEN 'New Title 3'
    11. END
    12. WHERE id IN (1,2,3)
以太坊cppgolang区别 编程

以太坊cppgolang区别

以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
progolang 编程

progolang

Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
golangn个发送者 编程

golangn个发送者

Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
golang技能图谱 编程

golang技能图谱

从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
评论:0   参与:  0