在业务开发过程中,遇到批量插入时,需要进行多重foreach循环的情况。
public class sysroledata extends dataentity<sysroledata> { private static final long rialversionuid = 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 uable; //是否可用(1:可用,0:不可用) private string remarks; //备注 private list<string> officeidlist = lists.newarraylist(); private list<string> roleidlist = lists.newarraylist(); private list<brandcategoryvo> datalist = lists.newarraylist(); public sysroledata() { super(); } public sysroledata(string id){ super(id); } public string getkind() { return kind; } public void tkind(string kind) { this.kind = kind; } @length(min=0, max=45, message="role_id长度必须介于 0 和 45 之间") public string getroleid() { return roleid; } public void troleid(string roleid) { this.roleid = roleid; } public string getrolename() { return rolename; } public void trolename(string rolename) { this.rolename = rolename; } public string getofficename() { return officename; } public void tofficename(string officename) { this.officename = officename; } @length(min=0, max=45, message="office_id长度必须介于 0 和 45 之间") public string getofficeid() { return officeid; } public void tofficeid(string officeid) { this.officeid = officeid; } @length(min=0, max=4, message="品类长度必须介于 0 和 45 之间") public string gettype() { return type; } public void ttype(string type) { this.type = type; } @notnull public string getdataid() { return dataid; } public void tdataid(string dataid) { this.dataid = dataid; } public string getdataname() { return dataname; } public void tdataname(string dataname) { this.dataname = dataname; } public string getdataids() { return dataids; } public void tdataids(string dataids) { this.dataids = dataids; } public string getdatanames() { return datanames; } public void tdatanames(string datanames) { this.datanames = datanames; } public string getuable() { return uable; } public void tuable(string uable) { this.uable = uable; } public string getremarks() { return remarks; } public void tremarks(string remarks) { this.remarks = remarks; } public list<brandcategoryvo> getdatalist() { return datalist; } public void tdatalist(list<brandcategoryvo> datalist) { this.datalist = datalist; } public list<string> getofficeidlist() { return officeidlist; } public void tofficeidlist(list<string> officeidlist) { this.officeidlist = officeidlist; } public list<string> getroleidlist() { return roleidlist; } public void troleidlist(list<string> roleidlist) { this.rolei成绩查询系统平台dlist = roleidlist; } public string getgroupno() { return groupno; } public void tgroupno(string groupno) { this.groupno = groupno; }}
如上所示为一个实体类,会有datalist和roleidlist或officeidlist,在批量插入时从而形成多重循环。
上图为列表页面,
上图为添加页面。部门名称和品牌,品类名称支持多选,而在保存时,需要将其拆分保存。在查询时通过group_concat函数进行聚合展示在列表页面。
故在批量插入数据时:
<inrt id="inrt"> inrt into sys_role_data( kind, role_id, office_id, type, data_id, data_name, group_no, uable, remarks, create_date, create_by, update_date, update_by )values <i大学生怎么找工作f test="kind != null and kind == 0"> <foreach collection="officeidlist" item="officeid" parator=","> <foreach collection="datalist" item="data" parator=","> ( #{kind}, null, #{officeid}, #{type}, #{data.id}, #{data.name}, #{groupno}, #{uable}, #{remarks}, #{createdate}, #{createby.id}, #{updatedate}, #{updateby.id} ) </foreach> </foreach> </if> <if test="kind != null and kind == 1"> <foreach collection="roleidlist" item="roleid" parator=","> <foreach collection="datalist" item="data" parator=","> ( #{kind}, #{roleid}, null, #{type}, #{data.id}, #{data.name}, #{groupno}, #{uable}, #{remarks}, #{createdate}, #{createby.id}, #{updatedate}, #{updateby.id} ) </foreach> </foreach> </if></inrt>
由上面sql可以看出,根据kind不同,进行相应的双重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 bamapper<patrolrecord> { int inrtlist(@param(value = "list") list<patrolrecord> list);}
mapper 换了很多种写法
<inrt id="inrtlist" parametertype="com.iricto.soft.patrol.entity.patrolrecord"> inrt into patrol_record(status_info_id,route_id,place_name横线怎么打,patrol_time, patrol_ur,patrol_class,`status`) values <foreach collection="list" item="patrolrecord" parator=","> (patrolrecord.#{statusinfoid}, patrolrecord.#{routeid}, patrolrecord.#{placename}, patrolrecord.#{patroltime}, patrolrecord.#{patrolur}, patrolrecord.#{patrolclass}, patrolrecord.#{status}) </foreach> </inrt>
mapper
<inrt id="inrtlist" parametertype="com.iricto.soft.patrol.entity.patrolrecord"> inrt into patrol_record(status_info_id,route_id,place_name,patrol_time, patrol_ur,patrol_class,`status`) values <foreach collection="list" item="list" open="(" parator="," clo=")"> list.#{statusinfoid}, list.#{routeid}, list.#{placename}, list.#{patroltime}, list.#{patrolur}, list.#{patrolclass}, list.#{status} </foreach> </inrt>英语四级改革
最后应该这么写才对 : mapper
<inrt id="inrtlist" parametertype="com.iricto.soft.patrol.entity.patrolrecord"> inrt into patrol_record(status_info_id,route_id,place_name,patrol_time, patrol_ur,patrol_class,`status`) values <foreach collection="list" item="patrolrecord" parator=","> ( #{patrolrecord.statusinfoid}, #{patrolrecord.routeid}, #{patrolrecord.placename}, #{patrolrecord.patroltime}, #{patrolrecord.patrolur}, #{patrolrecord.patrolclass}, #{patrolrecord.status}) </foreach> </in运算符号包括哪些rt>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-04 22:43:10,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/491032a8a10274602499bdd5e028f099.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:MyBatis实现批量插入数据,多重forEach循环.doc
本文 PDF 下载地址:MyBatis实现批量插入数据,多重forEach循环.pdf
留言与评论(共有 0 条评论) |