java新增關(guān)聯(lián)的三張表,每張表要求都插入集合,代碼實(shí)現(xiàn)方式
一、表
1.第一張表
表名: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í)體類
1.第一張表的實(shí)體類
// 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í)體類
@Data public class GoodsSellAttributeValueDTO { private Integer nameId; private String attributeValue; private Integer valueId; // 放入第三張表的DTO private List<GoodsSubAttributeValueDTO> goodsSubAttributeValueDTO; }
3.第三張表的是實(shí)體類
@Data public class GoodsSubAttributeValueDTO { private Integer valueId; private String subValue; }
三、在xml中sql的編寫
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 實(shí)現(xiàn)局域網(wǎng)文件傳輸?shù)膶?shí)例
這篇文章主要介紹了java 實(shí)現(xiàn)局域網(wǎng)文件傳輸?shù)膶?shí)例的相關(guān)資料,這里提供了實(shí)現(xiàn)代碼可以幫助大家理解TCP及文件讀寫的知識(shí),需要的朋友可以參考下2017-07-07如何基于java實(shí)現(xiàn)解壓ZIP TAR等文件
這篇文章主要介紹了如何基于java實(shí)現(xiàn)解壓ZIP TAR等文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07IntelliJ IDEA 部署 Web 項(xiàng)目,看這一篇夠了!
這篇文章主要介紹了IntelliJ IDEA 部署 Web 項(xiàng)目的圖文教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-052024版本IDEA創(chuàng)建Servlet模板的圖文教程
新版IDEA?2024.1.4中,用戶需要自行創(chuàng)建Servlet模板以解決Web項(xiàng)目無(wú)法通過(guò)右鍵創(chuàng)建Servlet的問(wèn)題,本文詳細(xì)介紹了添加ServletAnnotatedClass.java模板的步驟,幫助用戶快速配置并使用新的Servlet模板,需要的朋友可以參考下2024-10-10Springboot啟動(dòng)同時(shí)創(chuàng)建數(shù)據(jù)庫(kù)和表實(shí)現(xiàn)方法
這篇文章主要介紹了Springboot啟動(dòng)同時(shí)創(chuàng)建數(shù)據(jù)庫(kù)和表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01Spring boot自定義http反饋狀態(tài)碼詳解
這篇文章主要給大家介紹了Spring boot自定義http反饋狀態(tài)碼的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06