MyBatis中主表数据添加附带的从表(1-N)条数据一并添加

主表Banner添加,附带的BannerDetail明细表数据(1-N)条数据也添加

利用postman测试结果显示图
在这里插入图片描述
Controller :

 @CrossOrigin
    @PostMapping("/saveBanner")
    public String saveProductItem(@RequestBody BannerDetailVO bannerDetailVO) {
        Result result = null;
        try {
            int num = bannerService.insertBanner(bannerDetailVO);
            result = num > 0 ? new Result(ResultCode.SECCESS) : new Result(ResultCode.FAIL);
        } catch (Exception e) {
            ResultCode.UNKNOW.setResult_msg(e.getMessage());
            result = new Result(ResultCode.UNKNOW);
        }
        String jsonStr = JSONObject.toJSONString(result);
        return jsonStr;
    }

MyBatis :

  <insert id="insertBanner" useGeneratedKeys="true" keyProperty="id" parameterType="com.bmcs.ps.dal.entity.Banner">
   INSERT INTO banner
   (`code`,`name`,`describe`,`type`,width,height,memo)
   VALUES (#{code,jdbcType=VARCHAR},#{name,jdbcType=VARCHAR},#{describe,jdbcType=VARCHAR},#{type,jdbcType=INTEGER},#{width,jdbcType=FLOAT},#{height,jdbcType=FLOAT},#{memo,jdbcType=VARCHAR})
  </insert>

item=“bannerDeteil” 是取个别名, collection=“bannerDetailList”
跟BannerDetailMapper中int insertBannerDetail(@Param(“bannerDetailList”) List< BannerDetail > bannerDetailList);要一致对应,循环添加从表中N条数据

    <insert id="insertBannerDetail" parameterType="com.bmcs.ps.dal.entity.BannerDetail">
        INSERT INTO bannerdetail (`no`, sort, price,`code`) VALUES
        <foreach collection="bannerDetailList" item="bannerDeteil" separator=",">
            (#{bannerDeteil.no},#{bannerDeteil.sort},#{bannerDeteil.price},#{bannerDeteil.code})
        </foreach>
    </insert>

pojo :

BannerDetailVO包含了Banner主表,BannerDetail从表

public class BannerDetailVO {
    private Banner banner;
    private List<BannerDetail> bannerDetailList;
    public Banner getBanner() {
        return banner;
    }

    public void setBanner(Banner banner) {
        this.banner = banner;
    }

    public List<BannerDetail> getBannerDetailList() {
        return bannerDetailList;
    }

    public void setBannerDetailList(List<BannerDetail> bannerDetailList) {
        this.bannerDetailList = bannerDetailList;
    }

}

selvice :

BannerService中:

    int insertBanner(BannerDetailVO bannerDetailVO ) throws Exception;

BannerMapper中:

  int insertBanner(Banner banner);

BannerDetailMapper中 :

  int insertBannerDetail(@Param("bannerDetailList") List<BannerDetail> bannerDetailList);

因为我这里是想要将Banner主表的code,添加到BannerDetail从表code中

 @Override
    @Transactional
    public int insertBanner(BannerDetailVO bannerDetailVO) throws Exception {
        int result = 0;
        if (bannerDetailVO.getBanner().getId() == null) {
            bannerMapper.insertBanner(bannerDetailVO.getBanner());
            Integer id = bannerDetailVO.getBanner().getId();
            String code = bannerMapper.findBannerCode(id);
            if (bannerDetailVO.getBannerDetailList() != null && bannerDetailVO.getBannerDetailList().size() > 0) {
                for (BannerDetail bd : bannerDetailVO.getBannerDetailList()) {
                    bd.setCode(code);
                }
                result = bannerDetailMapper.insertBannerDetail(bannerDetailVO.getBannerDetailList());
            }
        } 
        return result;
    }

猜你喜欢

转载自blog.csdn.net/qq_40588618/article/details/89522044