P11 品牌管理

时间:2024-06-10 07:18:05

P75 品牌分类关联和级联更新

第一步

1、把renren-fast-vue\src\views\modules下的common和product模块复制到vue中

2、mybatisplus的分页插件,来调整品牌管理页面的页数不对问题

product新建config/MybatisPlusConfig.java文件,参照官网,添加依赖,导入类

mapperScan扫描的包是dao层下的,其他一样

@MapperScan("com.atguigu.gulimail.product.dao")

3、品牌管理页面的查询功能不对

是在brandController的list请求中

StringUtils用的是lang包下的

String s = (String) params.get("key");
        QueryWrapper<BrandEntity> brandEntityQueryWrapper = new QueryWrapper<>();
        if(!StringUtils.isEmpty(s)){
            brandEntityQueryWrapper.eq("brand_id",s).or().like("name",s);
        }
        IPage<BrandEntity> page = this.page(
                new Query<BrandEntity>().getPage(params),
                brandEntityQueryWrapper
        );

4、执行pms.sql恢复原始形状,删除所有数据

第二步

1、品牌管理页面,关联分类显示信息

/product/categorybrandrelation/catelog/list
CategoryBrandRelationController.java
@RequestMapping("/catelog/list")
    public R categoryList(@RequestParam("brandId") Long brandId){
        List<CategoryBrandRelationEntity> list = categoryBrandRelationService.list(
                new QueryWrapper<CategoryBrandRelationEntity>().eq("brand_id",brandId));

        return R.ok().put("page", list);
    }

2、保存关联分类详细信息

@RequestMapping("/save")
    public R save(@RequestBody CategoryBrandRelationEntity categoryBrandRelation){
        // 查到对应的品牌名称和分类名称
		categoryBrandRelationService.saveDetail(categoryBrandRelation);
        return R.ok();
    }

这里面三方表自动注入 不是service,否则双向依赖。

品牌有注入关联表,关联表也注入有品牌服务。

这里用 Dao!

@Autowired
private CategoryDao categoryDao;
@Autowired
private BrandDao brandDao;
public void saveDetail(CategoryBrandRelationEntity categoryBrandRelation) {
        Long brandId = categoryBrandRelation.getBrandId();
        Long catelogId = categoryBrandRelation.getCatelogId();
        // 查询品牌名和分类名
        BrandEntity brand = brandDao.selectById(brandId);
        CategoryEntity category = categoryDao.selectById(catelogId);
        categoryBrandRelation.setBrandName(brand.getName());
        categoryBrandRelation.setCatelogName(category.getName());
        this.save(categoryBrandRelation);
    }

第三步

品牌页面更新名字时,category_brand数据表也要更新

是用的update里面,不是save

@RequestMapping("/update")
    public R update(@Validated({UpdataGroup.class}) @RequestBody BrandEntity brand){
		brandService.updateDetail(brand);
        return R.ok();
    }
@Autowired
private CategoryBrandRelationService categoryBrandRelationService;

@Transactional
@Override
public void updateDetail(BrandEntity brand) {
        this.updateById(brand);
        // 更新其他关联表
        if(!StringUtils.isEmpty(brand.getName())){
            categoryBrandRelationService.updateBrandName(brand.getBrandId(),brand.getName());
        }
    }    
@Override
    public void updateCatelogName(Long catId, String name) {
        CategoryBrandRelationEntity categoryBrandRelation = new CategoryBrandRelationEntity();
        categoryBrandRelation.setCatelogId(catId);
        categoryBrandRelation.setBrandName(name);
        this.update(categoryBrandRelation,
                new UpdateWrapper<CategoryBrandRelationEntity>().eq("catelog_id",catId));
    }

第四步

同理,分类信息更新时,category_brand数据表也要更新

@RequestMapping("/update")
    public R update(@RequestBody CategoryEntity category){
		categoryService.updateDetail(category);
        return R.ok();
    }
@Transactional
@Override
    public void updateDetail(CategoryEntity category) {
        this.updateById(category);
        // 更新其他关联表
        if(!StringUtils.isEmpty(category.getName())){
            categoryBrandRelationService.updateCatelogName(category.getCatId(), category.getName());
        }
    }

换一种方法实现,用mybatisplus。需要安装mybatisX插件

@Override
    public void updateCatelogName(Long catId, String name) {
        this.baseMapper.updateCatelogName(catId, name);
    }

之后自动创建方法,提示生成。起名字

@Mapper
public interface CategoryBrandRelationDao extends BaseMapper<CategoryBrandRelationEntity> {

    void updateCatelogName(@Param("id") Long catId,@Param("name") String name);
}
<update id="updateCatelogName">
        UPDATE pms_category_brand_relation SET catelog_name = #{name}  WHERE catelog_id = #{id}
    </update>

其他

异常根类是Throwable,它有两个子类:

Error: 错误,非常严重

Exception:编译时异常,写代码时的异常。也就是平时所说的异常,使用不当导致,可避免。它有个子类:

RuntimeException:运行时异常