MyBatis中批量插入資料,多重forEach迴圈
在業務開發過程中,遇到批量插入時,需要進行多重forEach迴圈的情況。下面是一個實際應用:
public class SysRoleData extends DataEntity<SysRoleData> { 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<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 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<BrandCategoryVO> getDataList() { return dataList; } public void setDataList(List<BrandCategoryVO> dataList) { this.dataList = dataList; } public List<String> getOfficeIdList() { return officeIdList; } public void setOfficeIdList(List<String> officeIdList) { this.officeIdList = officeIdList; } public List<String> getRoleIdList() { return roleIdList; } public void setRoleIdList(List<String> roleIdList) { this.roleIdList = roleIdList; } public String getGroupNo() { return groupNo; } public void setGroupNo(String groupNo) { this.groupNo = groupNo; } }
如上所示為一個實體類,會有dataList和roleIdList或officeIdList,在批量插入時從而形成多重迴圈。
上圖為列表頁面,
上圖為新增頁面。部門名稱和品牌,品類名稱支援多選,而在儲存時,需要將其拆分儲存。在查詢時通過group_concat函式進行聚合展示在列表頁面。
故在批量插入資料時:
<insert id="insert"> 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 <if test="kind != null and kind == 0"> <foreach collection="officeIdList" item="officeId" separator=","> <foreach collection="dataList" item="data" separator=","> ( #{kind}, null, #{officeId}, #{type}, #{data.id}, #{data.name}, #{groupNo}, #{useable}, #{remarks}, #{createDate}, #{createBy.id}, #{updateDate}, #{updateBy.id} ) </foreach> </foreach> </if> <if test="kind != null and kind == 1"> <foreach collection="roleIdList" item="roleId" separator=","> <foreach collection="dataList" item="data" separator=","> ( #{kind}, #{roleId}, null, #{type}, #{data.id}, #{data.name}, #{groupNo}, #{useable}, #{remarks}, #{createDate}, #{createBy.id}, #{updateDate}, #{updateBy.id} ) </foreach> </foreach> </if> </insert>
由上面sql可以看出,根據kind不同,進行相應的雙重forEach迴圈插入資料。
相關文章
- mybatis foreach迴圈MyBatis
- mybatis插入資料、批量插入資料MyBatis
- 還用foreach在MyBatis批量插入資料,伺服器還沒崩?MyBatis伺服器
- MyBatis xml foreach迴圈語句MyBatisXML
- MyBatis Plus 批量資料插入功能,yyds!MyBatis
- 使用Mybatis批量插入大量資料的實踐MyBatis
- 跳出多重for迴圈
- Java通過Mybatis實現批量插入資料到Oracle中JavaMyBatisOracle
- 使用MySqlBulkLoader批量插入資料MySql
- js迴圈(for/for in/forEach/map/for of)詳解JS
- mybatis 批次插入資料MyBatis
- js中為什麼for迴圈比forEach效能高?JS
- Mybatis框架:foreach迴圈遍歷欄位(為了解決動態表、動態欄位查詢資料)MyBatis框架
- Mybatis中foreach的使用MyBatis
- C#程式設計基礎第七課:C#中的基本迴圈語句:while迴圈、do-while迴圈、for迴圈、foreach迴圈的使用C#程式設計While
- 【MyBatis】幾種批量插入效率的比較MyBatis
- Oracle批量插入資料insert all into用法Oracle
- 使用 【Ado.Net】 批量插入資料
- MySQL:JDBC批量插入資料的效率MySqlJDBC
- mysql迴圈插入資料、生成隨機數及CONCAT函式MySql隨機函式
- 視訊課程-如何跳出forEach迴圈
- foreach迴圈中為什麼不要進行remove/add操作REM
- SQL Server 2014如何使用遊標迴圈向遠端資料庫插入資料SQLServer資料庫
- Laravel 批量插入(如果資料存在刪除原資料)Laravel
- foreach 實現 MyBatis 遍歷集合與批量運算元據MyBatis
- 【廖雪峰python入門筆記】多重迴圈Python筆記
- 資料結構:單迴圈連結串列的建立插入與刪除資料結構
- Java基礎(二)- 普通for迴圈、foreach效能比較Java
- Mybatis:插入資料返回自增主鍵MyBatis
- Java MyBatis 插入資料庫返回主鍵JavaMyBatis資料庫
- JDBC 批量插入資料優化, 使用 addBatch 和 executeBatchJDBC優化BAT
- 2024-03-21 跳出forEach迴圈的3個方法
- C#中的For與Foreach迴圈:一場效能對話與實戰解析C#
- 基本資料型別,for迴圈資料型別
- for迴圈批量註冊事件處理函式事件函式
- mybatis 根據多個id查詢資料 foreach標籤MyBatis
- [Django高階之批量插入資料、分頁器元件]Django元件
- 記一個 forEach 不能跳出迴圈引發的問題