首页 > 其他分享 >mybatis 中 foreach collection的常见错误和用法小结(三种)

mybatis 中 foreach collection的常见错误和用法小结(三种)

时间:2024-11-16 21:50:04浏览次数:3  
标签:flavors 迭代 List collection 参数 foreach mybatis

主要介绍了mybatis 中 foreach collection的用法小结(三种),需要的朋友可以参考下。

foreach主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach元素的属性主要有 item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名,

index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,

open表示该语句以什么开始,

separator表示在每次进行迭代之间以什么符号作为分隔 符,

close表示以什么结束。

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

  1. 如果是单参数且参数类型是一个 List,则 collection 应该设为 "list"
  2. 如果是单参数且参数类型是一个数组,则 collection 应该设为 "array"
  3. 如果有多个参数,它们会被封装成一个 Map,此时 collection 应该设为这个 Map 中对应集合类型的 key 名称。

示例中,dishFlavorMapper.insert(flavors) 方法接收了一个 List<DishFlavor> 参数 flavors。由于这是一个单参数且参数类型是一个 List,所以 <foreach> 标签中的 collection 应该被设置为 "list"。这里写成flavors是错误的。

Mapper 接口
public interface DishFlavorMapper {
    void insert(List<DishFlavor> flavors);
}
XML 映射文件
<insert id="insert">
    insert into dish_flavor (name, value, dish_id) values
    <foreach collection="list" item="df" separator=",">
        (#{df.name}, #{df.value}, #{df.dishId})
    </endforeach>
</insert>
Service 层代码
List<DishFlavor> flavors = dishDTO.getFlavors();
if (flavors != null && !flavors.isEmpty()) {
    flavors.forEach(dishFlavor -> dishFlavor.setDishId(dishId));
    dishFlavorMapper.insert(flavors);
}

解释

  • collection="list":因为传入的是一个 List 类型的参数,所以在 <foreach> 标签中使用 collection="list" 是正确的。
  • item="df":这是用来表示每次迭代的对象,这里命名为 df,可以根据实际情况命名。
  • separator=",":这是用来分割每次迭代生成的部分,这里用逗号作为分隔符。

标签:flavors,迭代,List,collection,参数,foreach,mybatis
From: https://blog.csdn.net/2301_76541209/article/details/143755411

相关文章

  • springboot3整合mybatisplus问题Invalid value type for attribute 'factoryBeanObjec
    版本说明:JDK版本:17springboot版本:3.3.5问题分析:springboot版本与mybatisplus版本不兼容解决办法:将mybatisplus版本替换为以下版本<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>......
  • SpringBoot整合Mybatis进行crud操作
    SpringBoot整合Mybatis进行crud操作一:创建数据表学生表createtables_stu(idintprimarykeyauto_increment,snamevarchar(255),ageint,sexchar(1),scoredouble(10,2),birthdaydate);教室表createtables_classroom(cidintprimarykey......
  • Java反序列化-Commons Collections3利用链分析详解
    介绍CC3与CC1和CC6的主要区别在于,CC1和CC6依赖反射机制来执行Runtime.getRuntime().exec()等危险命令,而如果服务器将这些方法列入黑名单,这两种方式就会失效。相比之下,CC3通过类加载器动态加载恶意类来执行危险函数,绕过黑名单限制,从而达到命令执行的目的。公众号:T......
  • MyBatis-Plus快速上手
     博主主页: 码农派大星.  数据结构专栏:Java数据结构 数据库专栏:MySQL数据库JavaEE专栏:JavaEE软件测试专栏:软件测试关注博主带你了解更多知识目录1.MyBatis-Plus介绍2.快速上⼿2.1添加MyBatis-Plus和MySQL依赖,配置数据库连接信息2.2编码创建实体类......
  • MyBatis面试题--(与数据库连接的相关知识)
    目录在MyBatis中,Mapper接口的作用是什么?当实体类中属性名和表中的字段名不一样,怎么办?1.使用@Result注解2.使用resultMap元素3.使用@Results注解(MyBatis3.4.1+)4.使用mapUnderscoreToCamelCase属性在MyBatis中如何实现分页功能?1.使用MyBatis分页插件2.手动编写分页SQL3.使......
  • MyBatis 和 JPA 的主要区别和适用场景
    MyBatis和JPA是两种常见的持久层框架,它们都可以用于将Java对象与数据库进行交互,但是它们的设计理念和使用方式有所不同。了解它们的主要区别和适用场景,有助于开发者根据具体需求选择合适的框架。1.MyBatis设计理念MyBatis是一种半自动化的持久层框架,它允许开发者自己编......
  • SpringBoot 3.3.5 集成 mybatis-plus-boot-starter 3.4.2报错
    一、环境JDK:17SpringBoot:3.3.5Mybatis-Plus:3.4.2二、报错信息Considerthefollowing: Ifyouwantanembeddeddatabase(H2,HSQLorDerby),pleaseputitontheclasspath. Ifyouhavedatabasesettingstobeloadedfromaparticularprofileyoumayneed......
  • Java集合框架之Collection集合遍历
    引言在Java编程中,集合(Collection)框架是处理对象集合的核心工具。它提供了一套统一的接口和类来存储和操作对象集合。遍历集合是日常开发中的一项基本任务,本文将深入探讨JavaCollection集合的遍历方法,并提供实际的代码示例。JavaCollection框架概览JavaCollection框架主要......
  • java.util.Collection集合方法:Collections.BinarySearch 方法
    BinarySearch(List,Object)  使用二進位搜尋演算法搜尋指定的物件清單。BinarySearch(List,Object,IComparator)  使用二進位搜尋演算法搜尋指定的物件清單。参数:List要所有的list列表Object要搜索的索引键案例:packagecom.test.controller;importcom.te......
  • Mybatis-plus之新特性,你都用过哪些?
    1.lambda方式查询在使用Mybatis-plus进行查询时,我们正常的操作是创建一个QueryWrapper,然后根据字段去做查询操作(如下图)那么就有一个问题,每个数据库的字段都需要写出来,遇到驼峰字段还需要转换为下划线形式,非常影响开发效率。而官方也考虑到这个问题,后续的版本已经提供了lambda的......