最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java新增關(guān)聯(lián)的三張表,每張表要求都插入集合,代碼實(shí)現(xiàn)方式

 更新時(shí)間:2023年12月13日 09:16:04   作者:程序猿不禿頭  
這篇文章主要介紹了java新增關(guān)聯(lián)的三張表,每張表要求都插入集合,代碼實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、表

1.第一張表

表名:goods_sell_attribute

goods_sell_attribute

2.第二張表

表名:goods_sell_attribute_value

以第一張表的name_id關(guān)聯(lián)

在這里插入圖片描述

3.第三張表

表名:goods_sub_attribute_value

以第二張表的value_id關(guān)聯(lián)

在這里插入圖片描述

二、實(shí)體類(lèi)

1.第一張表的實(shí)體類(lèi)

// lombok
@Data
public class GoodsSellAttributeDTO {
    private Integer nameId;
    private Integer valueId;
    private Integer firstLevelId;
    private String  firstLevelName;
    private Integer secondLevelId;
    private String secondLevelName;
    private Integer thirdLevelId;
    private String thirdLevelName;
    private String attributeName;
    private String required;
    // 放入第二張表的DTO
    private List<GoodsSellAttributeValueDTO> goodsSellAttributeValueDTO;

2.第二張表的實(shí)體類(lèi)

@Data
public class GoodsSellAttributeValueDTO {
    private Integer nameId;
    private String attributeValue;
    private Integer valueId;
    // 放入第三張表的DTO
    private List<GoodsSubAttributeValueDTO> goodsSubAttributeValueDTO;
    }

3.第三張表的是實(shí)體類(lèi)

@Data
public class GoodsSubAttributeValueDTO {
    private Integer valueId;
    private String  subValue;
    }

三、在xml中sql的編寫(xiě)

1.第一張表的新增sql

   <!--第一張表的新增 -->
    <insert id="insertGoodsSellAttributes" keyProperty="nameId" useGeneratedKeys="true" parameterType="com.dy.mallConfig.pojo.dto.GoodsSellAttributeDTO">
        INSERT INTO goods_sell_attribute
                (first_level_id,
                second_level_id,
                third_level_id,
            first_level_name,
            second_level_name,
            third_level_name,
            attribute_name,
            required,
            status)
            VALUES
        <foreach collection="list" separator="," item="item" index="index">
                (#{item.firstLevelId},
                #{item.secondLevelId},
                #{item.thirdLevelId},
            #{item.firstLevelName},
            #{item.secondLevelName},
            #{item.thirdLevelName},
            #{item.attributeName},
            #{item.required},
            '1')
        </foreach>
    </insert>

2.第二張表的新增sql

<!-- 第二張表-->
    <insert id="insertGoodsSellAttributeValues" keyProperty="valueId" useGeneratedKeys="true" parameterType="com.dy.mallConfig.pojo.dto.GoodsSellAttributeValueDTO">
        INSERT INTO goods_sell_attribute_value
            (name_id,attribute_value,status) VALUES
        <foreach collection="list" index="goodsIndex" item="item" separator="),(" open="(" close=")" >
            #{item.nameId},
            #{item.attributeValue,jdbcType=VARCHAR},
            '1'
        </foreach>
    </insert>

3.第三張表的新增sql

<!-- 第三張表-->
<insert id="insertGoodsSubAttributeValue" parameterType="com.dy.mallConfig.pojo.dto.GoodsSellAttributeValueDTO">
        INSERT INTO goods_sub_attribute_value
            (value_id,
            sub_value,
            status)
            VALUES
        <foreach collection="list" separator="," index="index" item="items">
        <foreach collection="items.goodsSubAttributeValueDTO" item="items1" index="index" separator="),(" open="(" close=")">
            #{items.valueId},
            #{items1.subValue},
            '1'
        </foreach>
        </foreach>
    </insert>

四、mapper層

// 第一張表
int insertGoodsSellAttributes(List<GoodsSellAttributeDTO> goodsSellAttributeDTO);
// 第二張表
    int insertGoodsSellAttributeValues(List<GoodsSellAttributeValueDTO> goodsSellAttributeValueDTO);
// 第三張表
    int insertGoodsSubAttributeValue(List<GoodsSellAttributeValueDTO> goodsSellAttributeValueDTO);

五、service層

// 接口
OutputObject insertGoodsSellAttributes(List<GoodsSellAttributeDTO> goodsSellAttributeDTO);

六、serviceImpl層

@Service
public class GoodsSellAttributeServiceImpl implements GoodsSellAttributeService {
    /**
     * 添加Log日志
     * @author zhushaojie
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(com.dy.mallConfig.service.impl.GoodsSellAttributeServiceImpl.class);

    @Autowired
    private GoodsSellAttributeMapper goodsSellAttributeMapper;
    
	@Override
	// 事務(wù)注解
    @Transactional(rollbackFor = Exception.class)
    public OutputObject insertGoodsSellAttributes(List<GoodsSellAttributeDTO> goodsSellAttributeDTO) {
        try {
            // 批量添加一級(jí)屬性
            int i = goodsSellAttributeMapper.insertGoodsSellAttributes(goodsSellAttributeDTO);

             // 將商品屬性和屬性子屬性中 抽離出來(lái)
            List<GoodsSellAttributeValueDTO> goodsSellAttributeValueDTO = goodsSellAttributeDTO.stream()
                    .flatMap(o -> o.getGoodsSellAttributeValueDTO().stream().peek(s -> {
                        s.setNameId(o.getNameId());
                    })).collect(Collectors.toList());
            if (i > 0 || goodsSellAttributeValueDTO.size()>0) {
                // 一級(jí)屬性添加完后,回調(diào)一級(jí)id添加到二級(jí)當(dāng)中,進(jìn)行新增操作
                int i1 = goodsSellAttributeMapper.insertGoodsSellAttributeValues(goodsSellAttributeValueDTO);

                List<List<GoodsSubAttributeValueDTO>>  goodsSubAttributeValueDTO= goodsSellAttributeValueDTO.stream().map(GoodsSellAttributeValueDTO::getGoodsSubAttributeValueDTO)
                        .collect(Collectors.toList());
                if (i1 > 0 && goodsSubAttributeValueDTO.get(0)!=null) {
                    // 二級(jí)屬性添加完后,回調(diào)二級(jí)id添加到二級(jí)當(dāng)中,進(jìn)行新增操作
                    goodsSellAttributeMapper.insertGoodsSubAttributeValue(goodsSellAttributeValueDTO);
                }
                return new OutputObject(ReturnCode.SUCCESS, "添加成功", "添加成功");

            }else {
                return new OutputObject(ReturnCode.FAIL, "添加失敗", goodsSellAttributeDTO);
            }

        }catch (Exception e){
            // 事務(wù)回滾
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return new OutputObject(ReturnCode.FAIL, "添加失敗", e.getMessage());
        }
        }


}

七、Controller

@RequestMapping("/insertGoodsSellAttributes")
    @ResponseBody
    public OutputObject insertGoodsSellAttributes(@RequestBody List<GoodsSellAttributeDTO> goodsSellAttributeDTO){
        return goodsSellAttributeService.insertGoodsSellAttributes(goodsSellAttributeDTO);
    }

總結(jié)

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

相關(guān)文章

  • Java線程編程中Thread類(lèi)的基礎(chǔ)學(xué)習(xí)教程

    Java線程編程中Thread類(lèi)的基礎(chǔ)學(xué)習(xí)教程

    這篇文章主要介紹了Java線程編程中Thread類(lèi)的基礎(chǔ)學(xué)習(xí)教程,Thread類(lèi)包含諸多操作線程的方法,非常重要,需要的朋友可以參考下
    2015-12-12
  • Java如何使用spire進(jìn)行word文檔的替換詳解

    Java如何使用spire進(jìn)行word文檔的替換詳解

    創(chuàng)作一份文案經(jīng)常會(huì)高頻率地使用某些詞匯,如地名、人名、人物職位等,若表述有誤,就需要整體撤換,下面這篇文章主要給大家介紹了關(guān)于Java如何使用spire進(jìn)行word文檔的替換的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Java多線程start()方法原理解析

    Java多線程start()方法原理解析

    這篇文章主要介紹了Java多線程start()方法原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • JavaWeb 實(shí)現(xiàn)多個(gè)文件壓縮下載功能

    JavaWeb 實(shí)現(xiàn)多個(gè)文件壓縮下載功能

    文件下載時(shí),我們可能需要一次下載多個(gè)文件,批量下載文件時(shí),需要將多個(gè)文件打包為zip,然后再下載。本文給大家分享實(shí)現(xiàn)思路及具體實(shí)現(xiàn)代碼,對(duì)javaweb實(shí)現(xiàn)文件壓縮下載功能感興趣的朋友一起學(xué)習(xí)吧
    2017-07-07
  • MybatisPlus自定義Sql實(shí)現(xiàn)多表查詢的示例

    MybatisPlus自定義Sql實(shí)現(xiàn)多表查詢的示例

    這篇文章主要介紹了MybatisPlus自定義Sql實(shí)現(xiàn)多表查詢的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SpringBoot+MyBatis Plus實(shí)現(xiàn)update_time字段自動(dòng)更新詳解

    SpringBoot+MyBatis Plus實(shí)現(xiàn)update_time字段自動(dòng)更新詳解

    在 Spring Boot + MyBatis Plus 中實(shí)現(xiàn) update_time 字段自動(dòng)更新,可通過(guò) ??MyBatis Plus 的自動(dòng)填充(Auto Fill)功能?? 完成,下面小編就來(lái)和大家詳細(xì)介紹一下吧
    2025-07-07
  • IDEA Debug啟動(dòng)tomcat報(bào)60659端口占用錯(cuò)誤的解決

    IDEA Debug啟動(dòng)tomcat報(bào)60659端口占用錯(cuò)誤的解決

    工作中將開(kāi)發(fā)工具由Eclipse轉(zhuǎn)為IntelliJ IDEA,在使用過(guò)程中遇到許多問(wèn)題,其中60659端口占用錯(cuò)誤對(duì)于不熟悉IDEA的開(kāi)發(fā)者來(lái)說(shuō)或許會(huì)比較頭痛,本文就來(lái)解決一下這個(gè)問(wèn)題
    2018-11-11
  • 詳解java中的互斥鎖信號(hào)量和多線程等待機(jī)制

    詳解java中的互斥鎖信號(hào)量和多線程等待機(jī)制

    這篇文章主要介紹了Java編程中的互斥鎖,信號(hào)量和多線程等待機(jī)制實(shí)例詳解,簡(jiǎn)單介紹了互斥鎖和信號(hào)量的區(qū)別,需要的朋友可以了解下。
    2017-09-09
  • 一文詳解SpringBoot使用Kafka如何保證消息不丟失

    一文詳解SpringBoot使用Kafka如何保證消息不丟失

    這篇文章主要為大家詳細(xì)介紹了SpringBoot使用Kafka如何保證消息不丟失的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2025-01-01
  • SpringBoot?創(chuàng)建獲取yml里配置字段值

    SpringBoot?創(chuàng)建獲取yml里配置字段值

    在Spring?Boot中通過(guò)@ConfigurationProperties綁定YML配置,創(chuàng)建Bean并提供訪問(wèn)方法,實(shí)現(xiàn)根據(jù)配置字段動(dòng)態(tài)處理業(yè)務(wù)邏輯,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-06-06

最新評(píng)論

曲阳县| 抚远县| 甘孜县| 保山市| 盘山县| 武胜县| 曲松县| 布拖县| 深水埗区| 岱山县| 卢氏县| 马龙县| 高雄市| 和静县| 宜州市| 洛南县| 曲周县| 山丹县| 凤翔县| 老河口市| 青州市| 丹东市| 仪陇县| 古田县| 湟中县| 嘉祥县| 松滋市| 蓬溪县| 江北区| 乌拉特中旗| 谷城县| 陵水| 桂林市| 东乡| 钟山县| 建平县| 浮梁县| 红河县| 前郭尔| 永吉县| 仪征市|