一.商品分类模块
先查根目录,在查子目录 直至子目录为null(递归)
1.lamda + stream
* lamda+stram
* filter 函数 过滤
* map 对参数逻辑处理
* collect 可以集合成所需要的集合类型
List categoryVOList = categories.stream().filter(category -> category.getParentId().equals(ROOT_PARENT_ID))
.map(category -> category2CategoryVO(category))
.sorted(Comparator.comparing(CategoryVO::getSortOrder).reversed())
.collect(Collectors.toList());
2.List排序
subCategoryVOList.sort(Comparator.comparing(CategoryVO::getSortOrder).reversed());
list.sort(Comparator.compating(...))
默认从小到大,.reversed() 从大到小
CategoryVO 为对象
getSortOrder为对象里排序的字段
3.sql查询过多优化
每次根据所传的父级ID查询下属商品的时候,都要获取一遍所有商品,sql执行过多,可以使用方法重载改变传参,demo如下
@Override
public void findSubCategoryId(Integer id, Set resultSet) {
List categories =categoryMapper.selectAll();
findSubCategoryId(id,resultSet,categories);
}
/**
* 数据库查询次数过多 使用方法重载 只查一次
* @param
* @return
*/
private void findSubCategoryId(Integer id,Set resultSet,List categories){
for (Category category:categories){
if (category.getParentId().equals(id)){
resultSet.add(category.getId());
findSubCategoryId(category.getId(),resultSet,categories);
}
}
}
4.几个注解
@RequestParam和@PathVariable
@RequestParam 注解的参数可直接拼写在URL后面,如/products?xxx=
@PathVariable注解的参数 代表已经在URL上占位了 如/products/{productId}
@Param使用
第一种:方法有多个参数,需要 @Param 注解
第二种:方法参数要取别名,需要 @Param 注解
第三种:XML 中的 SQL 使用了 $ ,那么参数中也需要 @Param 注解
5.Redis
StringRedisTemplate.opsForHash 操作 hash结构 H HK HVALUE
取值 .get(H,HK)
6. Insert方法 返回自增的ID
在xml文件 第一行加入 useGeneratedKeys="true" keyProperty="id"