MyBatis怎么实现批量插入数据,多重forEach循环
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,今天小编给大家分享一下MyBatis怎么实现批量插入数据,多重forEach循环的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇
千家信息网最后更新 2025年11月10日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安全错误
数据库的锁怎样保障安全
镇江市网络安全支队属于什么级别
苏州办公系统软件开发哪家正规
ceic数据库免费
大宗商品数据库
软件开发师能考什么证
网络安全方面人才的需要
湖北系统软件开发价格
数据库事物的多个性质
表格快速复制到数据库
福山软件开发哪家好
中山推广机器人rpa软件开发
芝罘区定制软件开发解决方案
长春工业大学网络安全专业
连云港工程软件开发哪家好
唐山廊坊oa网络技术
软件开发用英语怎么翻译
江苏好的软件开发品质保障
安全的服务器登陆方式有哪些
中国代理服务器代码
医疗管理系统设计数据库
优可生活软件开发
网络安全教育图片简单
大疆嵌入式软件开发面试经验
湖南服务器机柜虚拟主机
自己自学网络技术
手机软件开发的科技公司
一网络安全为主题的手抄报一年级
gentoo服务器
桂电研计数据库复试试卷
hp服务器阵列卡