MyBatis怎么实现批量插入数据,多重forEach循环
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,今天小编给大家分享一下MyBatis怎么实现批量插入数据,多重forEach循环的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇
千家信息网最后更新 2025年01月19日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安全错误
数据库的锁怎样保障安全
网络安全清单
数据库路左关联
利率数据库
许昌学院网络安全专业
数据库主键绑定
原神小米是什么服务器
word建立数据库矩阵
建网站要买服务器吗
刀剑神域服务器图片
台北软件开发工资多少
链接到当前数据库
网络安全方向公安局考试
农安通用网络技术服务
山西土地资产管理软件开发公司
国产服务器主机有哪些
ug9怎么重新设置许可证服务器
笔记本一键退出云服务器
方舟神器 换服务器
2022年网络安全相关比赛
软件开发工程师申请书
东莞市区块链软件开发
国内专利数据库公司排名
数据库在疫情控制中的作用
java软件开发接单
合肥科技互联网公司
租房订单数据库设计
济南嵌入式软件开发工程师
收看网络安全专题第五空间
网管员必读网络安全64m
网络安全法415规定