千家信息网

MyBatis怎么实现批量插入数据,多重forEach循环

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天小编给大家分享一下MyBatis怎么实现批量插入数据,多重forEach循环的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇
千家信息网最后更新 2026年11月03日MyBatis怎么实现批量插入数据,多重forEach循环

今天小编给大家分享一下MyBatis怎么实现批量插入数据,多重forEach循环的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

批量插入数据,多重forEach循环

在业务开发过程中,遇到批量插入时,需要进行多重forEach循环的情况。

下面是一个实际应用

public class SysRoleData extends DataEntity {   private static final long serialVersionUID = 1L;   private String kind;      //类别(1:按部门2:按角色)   private String roleId;    // role_id   private String roleName;  //角色名称   private String officeId;   //office_id   private String officeName;  //部门名称   private String type;      // 1.品牌 2.品类 3.品牌&品类   private String dataId;    // 数据ID品牌   private String dataName;    //数据名称品牌   private String dataIds;       // 数据ID品类   private String dataNames;    //数据名称品类   private String groupNo;  //分组标识   private String useable; //是否可用(1:可用,0:不可用)   private String remarks; //备注   private List officeIdList = Lists.newArrayList();   private List roleIdList = Lists.newArrayList();   private List dataList = Lists.newArrayList();   public SysRoleData() {      super();   }   public SysRoleData(String id){      super(id);   }   public String getKind() {      return kind;   }   public void setKind(String kind) {      this.kind = kind;   }   @Length(min=0, max=45, message="role_id长度必须介于 0 和 45 之间")   public String getRoleId() {      return roleId;   }   public void setRoleId(String roleId) {      this.roleId = roleId;   }   public String getRoleName() {      return roleName;   }   public void setRoleName(String roleName) {      this.roleName = roleName;   }   public String getOfficeName() {      return officeName;   }   public void setOfficeName(String officeName) {      this.officeName = officeName;   }   @Length(min=0, max=45, message="office_id长度必须介于 0 和 45 之间")   public String getOfficeId() {      return officeId;   }   public void setOfficeId(String officeId) {      this.officeId = officeId;   }   @Length(min=0, max=4, message="品类长度必须介于 0 和 45 之间")   public String getType() {      return type;   }   public void setType(String type) {      this.type = type;   }   @NotNull   public String getDataId() {      return dataId;   }   public void setDataId(String dataId) {      this.dataId = dataId;   }   public String getDataName() {      return dataName;   }   public void setDataName(String dataName) {      this.dataName = dataName;   }   public String getDataIds() {      return dataIds;   }   public void setDataIds(String dataIds) {      this.dataIds = dataIds;   }   public String getDataNames() {      return dataNames;   }   public void setDataNames(String dataNames) {      this.dataNames = dataNames;   }   public String getUseable() {      return useable;   }   public void setUseable(String useable) {      this.useable = useable;   }   public String getRemarks() {      return remarks;   }   public void setRemarks(String remarks) {      this.remarks = remarks;   }   public List getDataList() {      return dataList;   }   public void setDataList(List dataList) {      this.dataList = dataList;   }   public List getOfficeIdList() {      return officeIdList;   }   public void setOfficeIdList(List officeIdList) {      this.officeIdList = officeIdList;   }   public List getRoleIdList() {      return roleIdList;   }   public void setRoleIdList(List roleIdList) {      this.roleIdList = roleIdList;   }   public String getGroupNo() {      return groupNo;   }   public void setGroupNo(String groupNo) {      this.groupNo = groupNo;   }}

如上所示为一个实体类,会有dataList和roleIdList或officeIdList,在批量插入时从而形成多重循环。

上图为列表页面,

上图为添加页面。部门名称和品牌,品类名称支持多选,而在保存时,需要将其拆分保存。在查询时通过group_concat函数进行聚合展示在列表页面。

故在批量插入数据时:

   INSERT INTO sys_role_data(   kind,   role_id,   office_id,   type,   data_id,   data_name,   group_no,   useable,   remarks,   create_date,   create_by,   update_date,   update_by   )VALUES                           (            #{kind},            null,            #{officeId},            #{type},            #{data.id},            #{data.name},            #{groupNo},            #{useable},            #{remarks},            #{createDate},            #{createBy.id},            #{updateDate},            #{updateBy.id}         )                                             (            #{kind},            #{roleId},            null,            #{type},            #{data.id},            #{data.name},            #{groupNo},            #{useable},            #{remarks},            #{createDate},            #{createBy.id},            #{updateDate},            #{updateBy.id}         )                  

由上面sql可以看出,根据kind不同,进行相应的双重forEach循环插入数据。

mybatis insert foreach

项目场景

报错 ,找不到参数

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘statusInfoId’ not found. Available parameters are [collection, list]

  @Mapperpublic interface PatrolRecordMapper extends BaseMapper {    int insertList(@Param(value = "list") List list);}

mapper 换了很多种写法

            insert into patrol_record(status_info_id,route_id,place_name,patrol_time,        patrol_user,patrol_class,`status`)        VALUES                    (patrolRecord.#{statusInfoId},            patrolRecord.#{routeId},            patrolRecord.#{placeName},            patrolRecord.#{patrolTime},            patrolRecord.#{patrolUser},            patrolRecord.#{patrolClass},            patrolRecord.#{status})            

mapper

            insert into patrol_record(status_info_id,route_id,place_name,patrol_time,        patrol_user,patrol_class,`status`)        VALUES                    list.#{statusInfoId},            list.#{routeId},            list.#{placeName},            list.#{patrolTime},            list.#{patrolUser},            list.#{patrolClass},            list.#{status}            

最后应该这么写才对 : mapper

            insert into patrol_record(status_info_id,route_id,place_name,patrol_time,        patrol_user,patrol_class,`status`)        VALUES                    (            #{patrolRecord.statusInfoId},            #{patrolRecord.routeId},            #{patrolRecord.placeName},            #{patrolRecord.patrolTime},            #{patrolRecord.patrolUser},            #{patrolRecord.patrolClass},            #{patrolRecord.status})            

以上就是"MyBatis怎么实现批量插入数据,多重forEach循环"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

数据 循环 名称 品类 品牌 知识 篇文章 之间 部门 长度 页面 不同 上图 内容 角色 很大 业务 写法 函数 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 重生之互联网科技帝国 厦门中拓互联网络科技有限公司 重庆互联网络科技 互联网 科技 上海互联网科技有限公司 未来的互联网科技 互联网科技公司有哪些 深圳卡尔迅互联网科技有限公司怎么样 互联网 科技馆 深圳国际航运科技和互联网 创业天下互联网科技有限公司 宝灵互联网科技有限公司 苏州五指互联网络科技有限 西安小鹰速贷互联网科技有限公司 云南省自由互联网科技有限公司 广州互联网高科技取餐柜 广州有谷有贝互联网科技有限公司 科技互联网公司两年变化 颐高云石互联网科技 互联网科技公司的优势 鸠鸠互联网科技 互联网 科技创业 鑫亿盛互联网科技 一五八零互联网科技 互联网和黑科技的看法 互联网金融科技名词解释 优雇互联网科技有限公司 互联网科技创业有什么好项目 六子台科技互联网展会
0