亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MyBatis實(shí)現(xiàn)批量插入數(shù)據(jù),多重forEach循環(huán)

 更新時(shí)間:2022年02月08日 08:38:44   作者:m0_37837382  
這篇文章主要介紹了MyBatis實(shí)現(xiàn)批量插入數(shù)據(jù),多重forEach循環(huán)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

批量插入數(shù)據(jù),多重forEach循環(huán)

在業(yè)務(wù)開發(fā)過(guò)程中,遇到批量插入時(shí),需要進(jìn)行多重forEach循環(huán)的情況。

下面是一個(gè)實(shí)際應(yīng)用

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; ? ?// 數(shù)據(jù)ID品牌
? ?private String dataName; ? ?//數(shù)據(jù)名稱品牌
? ?private String dataIds; ? ? ? // 數(shù)據(jù)ID品類
? ?private String dataNames; ? ?//數(shù)據(jù)名稱品類
? ?private String groupNo; ?//分組標(biāo)識(shí)
? ?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長(zhǎng)度必須介于 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長(zhǎng)度必須介于 0 和 45 之間")
? ?public String getOfficeId() {
? ? ? return officeId;
? ?}
? ?public void setOfficeId(String officeId) {
? ? ? this.officeId = officeId;
? ?}
? ?@Length(min=0, max=4, message="品類長(zhǎng)度必須介于 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;
? ?}
}

如上所示為一個(gè)實(shí)體類,會(huì)有dataList和roleIdList或officeIdList,在批量插入時(shí)從而形成多重循環(huán)。 

上圖為列表頁(yè)面,

上圖為添加頁(yè)面。部門名稱和品牌,品類名稱支持多選,而在保存時(shí),需要將其拆分保存。在查詢時(shí)通過(guò)group_concat函數(shù)進(jìn)行聚合展示在列表頁(yè)面。

故在批量插入數(shù)據(jù)時(shí):

<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可以看出,根據(jù)kind不同,進(jìn)行相應(yīng)的雙重forEach循環(huán)插入數(shù)據(jù)。

mybatis insert foreach

項(xiàng)目場(chǎng)景

報(bào)錯(cuò) ,找不到參數(shù)

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘statusInfoId’ not found. Available parameters are [collection, list]

? @Mapper
public interface PatrolRecordMapper extends BaseMapper<PatrolRecord> {
? ? int insertList(@Param(value = "list") List<PatrolRecord> list);
}

mapper 換了很多種寫法

? ? <insert id="insertList" parameterType="com.iricto.soft.patrol.entity.PatrolRecord">
? ? ? ? insert into patrol_record(status_info_id,route_id,place_name,patrol_time,
? ? ? ? patrol_user,patrol_class,`status`)
? ? ? ? VALUES
? ? ? ? <foreach collection="list" item="patrolRecord" separator=",">
? ? ? ? ? ? (patrolRecord.#{statusInfoId},
? ? ? ? ? ? patrolRecord.#{routeId},
? ? ? ? ? ? patrolRecord.#{placeName},
? ? ? ? ? ? patrolRecord.#{patrolTime},
? ? ? ? ? ? patrolRecord.#{patrolUser},
? ? ? ? ? ? patrolRecord.#{patrolClass},
? ? ? ? ? ? patrolRecord.#{status})
? ? ? ? </foreach>
? ? </insert>

mapper

? ? <insert id="insertList" parameterType="com.iricto.soft.patrol.entity.PatrolRecord">
? ? ? ? insert into patrol_record(status_info_id,route_id,place_name,patrol_time,
? ? ? ? patrol_user,patrol_class,`status`)
? ? ? ? VALUES
? ? ? ? <foreach collection="list" item="list"
? ? ? ? ? ? ? ? ?open="(" separator="," close=")">
? ? ? ? ? ? list.#{statusInfoId},
? ? ? ? ? ? list.#{routeId},
? ? ? ? ? ? list.#{placeName},
? ? ? ? ? ? list.#{patrolTime},
? ? ? ? ? ? list.#{patrolUser},
? ? ? ? ? ? list.#{patrolClass},
? ? ? ? ? ? list.#{status}
? ? ? ? </foreach>
? ? </insert>

最后應(yīng)該這么寫才對(duì) : mapper  

? ? <insert id="insertList" parameterType="com.iricto.soft.patrol.entity.PatrolRecord">
? ? ? ? insert into patrol_record(status_info_id,route_id,place_name,patrol_time,
? ? ? ? patrol_user,patrol_class,`status`)
? ? ? ? VALUES
? ? ? ? <foreach collection="list" item="patrolRecord" separator=",">
? ? ? ? ? ? (
? ? ? ? ? ? #{patrolRecord.statusInfoId},
? ? ? ? ? ? #{patrolRecord.routeId},
? ? ? ? ? ? #{patrolRecord.placeName},
? ? ? ? ? ? #{patrolRecord.patrolTime},
? ? ? ? ? ? #{patrolRecord.patrolUser},
? ? ? ? ? ? #{patrolRecord.patrolClass},
? ? ? ? ? ? #{patrolRecord.status})
? ? ? ? </foreach>
? ? </insert>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解使用Maven構(gòu)建多模塊項(xiàng)目(圖文)

    詳解使用Maven構(gòu)建多模塊項(xiàng)目(圖文)

    這篇文章主要介紹了詳解使用Maven構(gòu)建多模塊項(xiàng)目(圖文),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • Idea導(dǎo)入多個(gè)maven項(xiàng)目到同一目錄下的方法示例

    Idea導(dǎo)入多個(gè)maven項(xiàng)目到同一目錄下的方法示例

    這篇文章主要介紹了Idea導(dǎo)入多個(gè)maven項(xiàng)目到同一目錄下,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 淺析Java中的WeakHashMap

    淺析Java中的WeakHashMap

    這篇文章主要介紹了淺析Java中的WeakHashMap,WeakHashMap其實(shí)和HashMap大多數(shù)行為是一樣的,只是WeakHashMap不會(huì)阻止GC回收key對(duì)象,那么WeakHashMap是怎么做到的呢,這就是我們研究的主要問(wèn)題,需要的朋友可以參考下
    2023-09-09
  • Day14基礎(chǔ)不牢地動(dòng)山搖-Java基礎(chǔ)

    Day14基礎(chǔ)不牢地動(dòng)山搖-Java基礎(chǔ)

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Java?Chassis3熔斷機(jī)制的改進(jìn)路程技術(shù)解密

    Java?Chassis3熔斷機(jī)制的改進(jìn)路程技術(shù)解密

    這篇文章主要介紹了Java?Chassis?3技術(shù)解密之熔斷機(jī)制的改進(jìn)路程實(shí)例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 解決在for循環(huán)中remove list報(bào)錯(cuò)越界的問(wèn)題

    解決在for循環(huán)中remove list報(bào)錯(cuò)越界的問(wèn)題

    這篇文章主要介紹了解決在for循環(huán)中remove list報(bào)錯(cuò)越界的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • SpringBoot集成內(nèi)存數(shù)據(jù)庫(kù)Sqlite的實(shí)踐

    SpringBoot集成內(nèi)存數(shù)據(jù)庫(kù)Sqlite的實(shí)踐

    sqlite這樣的內(nèi)存數(shù)據(jù)庫(kù),小巧可愛,做小型服務(wù)端演示程序,非常好用,本文主要介紹了SpringBoot集成Sqlite,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-09-09
  • Hibernate批量處理海量數(shù)據(jù)的方法

    Hibernate批量處理海量數(shù)據(jù)的方法

    這篇文章主要介紹了Hibernate批量處理海量數(shù)據(jù)的方法,較為詳細(xì)的分析了Hibernate批量處理海量數(shù)據(jù)的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-03-03
  • Resty極簡(jiǎn)restful框架快速接入Spring

    Resty極簡(jiǎn)restful框架快速接入Spring

    這篇文章主要為大家介紹了Resty極簡(jiǎn)的restful框架快速接入Spring詳細(xì)說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • java并發(fā)編程專題(四)----淺談(JUC)Lock鎖

    java并發(fā)編程專題(四)----淺談(JUC)Lock鎖

    這篇文章主要介紹了java并發(fā)編程(JUC)Lock鎖的相關(guān)內(nèi)容,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06

最新評(píng)論