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:运行时异常