需求:
1. 数据库
设计原则:无限极分类
2, 接口
3,实现
3.1 pojo
3.2, dao 我用的是mybatis
3.3,service 用的example多条件查询
public List<Category> findCategorys(Integer parent_id) {
Example example = new Example(Category.class);
Example.Criteria criteria = example.createCriteria();
// 添加所属一级分类条件
criteria.andEqualTo("parent_id", parent_id);
return categoryMapper.selectByExample(example);
}
3.4 controller
@GetMapping("/categorys")
public ResponseEntity<Object> findAllCategorys(){
//优化:取之前先去redis取出,redis取不到再去数据库
String categorys = redisTemplate.opsForValue().get("category");
if(categorys!=null&&!"".equals(categorys.trim())){
return ResponseEntity.ok(categorys);
}
// 1. 查找一级分类
List<Category> list1 = categoryService.findCategorys(0);
// 2. 遍历一级分类,查找二级分类
for(Category c1:list1){
//3. c1.id就是二级分类的父id
List<Category> list2 = categoryService.findCategorys(c1.getId());
//4. list2就是当前一级的二级分类,将list2给c1的children
c1.setChildren(list2);
//5. 遍历二级分类list2,查找三级分类
for(Category c2:list2){
//6. 通过c2.id 获取三级分类的数据
List<Category> list3 = categoryService.findCategorys(c2.getId());
//7. 将list3给c2的children
c2.setChildren(list3);
}
}
// 8. 组装结果,返回
BaseResult br = new BaseResult(0, "成功", list1);
// 9. 放入redis
redisTemplate.opsForValue().set("category",JSON.toJSONString(br));
return ResponseEntity.ok(br);
}
因为是基于restful风格,所以用postman测试一下后台,来确保后台数据是无误的
然后在看看Redis
后台测试成功
进行前后端联调