MyBatis怎么实现批量插入数据,多重forEach循环
发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,今天小编给大家分享一下MyBatis怎么实现批量插入数据,多重forEach循环的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇
千家信息网最后更新 2024年11月18日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安全错误
数据库的锁怎样保障安全
手机变打印服务器
我的世界2b2t的服务器地址在哪
跑腿软件开发软件
中医诊断系统软件开发论文
服务器镜像怎么搬家
db2数据库设置字体
php服务器外网访问
PERT网络技术分析实例
郭霖 数据库框架
协议登录一号一IP软件开发
2021年网络安全主题基金
用数据库做什么系统
软件开发 文档 模板 表格
数据库调用文章 discuz
国际服手机我的世界怎么开服务器
高质量网络安全黑板报
教育网网络安全
vs软件开发界面自适应屏幕
网络技术服务费怎么开
服务器cpu一般有哪些核心数
肾上腺瘤数据库
龙之谷手游服务器太多
数据库技术贵吗
科技互联网估值查询
公安网络安全部署会
怎么提高服务器下行速度
海康摄像头服务器增强型端口
广州python软件开发定做
选修人数的数据库怎么写
浙江通用软件开发价格表