新峰商城_商品接口开发_some questions

119 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情

0 前言

本篇主要涉及到处理商品详情接口和商品搜索接口时遇到的一些问题。

1 字符串分割函数split

数据库中存储的商品详情轮播图为String类型,以逗号隔开。从数据库中读取之后,使用split方法将该字符串分割为字符串数组,即轮播图数组。

2 mysql模糊查询——like concat

SQL语句中的like模糊查询 select * from table where name like‘%赵%’
若匹配多个模糊查询字段,通常使用like concat

  • 具体某个字段匹配,根据名称模糊查询:

select * from table where name like concat(#{name},’%’)

  • 同时匹配多个字段,根据名称,状态,描述等字段模糊查询:

select * from table where CONCAT(id, name, status, description) LIKE CONCAT(’%’,#{fuzzy},’%’)

注: fuzzy是模糊查询数据信息根据这些字段一个一个循环查询进行匹配

3 CollectionUtils工具类

集合判断

判断集合是否为空:
     CollectionUtils.isEmpty(null): true
    CollectionUtils.isEmpty(new ArrayList()): true  
    CollectionUtils.isEmpty({a,b}): false
 
 判断集合是否不为空:
    CollectionUtils.isNotEmpty(null): false
    CollectionUtils.isNotEmpty(new ArrayList()): false
    CollectionUtils.isNotEmpty({a,b}): tru

并集、 交集、 交集的补集(析取)、 差集(扣除)、 集合是否相等......

4 mybatis的 choose -- when test -- otherwise 标签

choose标签是按顺序判断其内部when标签中的test条件是否成立,如果有一个成立,则 choose 结束。  当 choose 中所有 when 的条件都不满足时,则执行 otherwise 中的sql。

5 手写工具类BeanUtil

    List<SearchGoodsVo> searchGoodsVos=new ArrayList<>();
    if (!CollectionUtils.isEmpty(goodsList)) {
         searchGoodsVos = BeanUtil.copyList(goodsList, SearchGoodsVo.class);
    }

注意这里的SearchGoodsVo的字段类型要和数据库表中的类型对应。  

6 PageQueryUtil & PageResult

package com.lk.mall.util;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.util.LinkedHashMap;
import java.util.Map;

@EqualsAndHashCode(callSuper = true)
@ApiModel("分页")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageQueryUtil extends LinkedHashMap<String, Object> {

    @ApiModelProperty("当前页码")
    private int page;
    @ApiModelProperty("每页条数")
    private int limit;

    public PageQueryUtil(Map<String, Object> params) {
        this.putAll(params);

        //分页参数
        this.page = Integer.parseInt(params.get("page").toString());
        this.limit = Integer.parseInt(params.get("limit").toString());
        this.put("start", (page - 1) * limit);
        this.put("page", page);
        this.put("limit", limit);
    }
}
package com.lk.mall.util;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * 分页工具类
 */
@Data
public class PageResult<T> implements Serializable {

    @ApiModelProperty("总记录数")
    private int totalCount;

    @ApiModelProperty("总页数")
    private int totalPage;

    @ApiModelProperty("当前页数")
    private int currPage;

    @ApiModelProperty("每页记录数")
    private int pageSize;

    @ApiModelProperty("列表数据")
    private List<T> list;

    /**
     * 分页
     * @param list       列表数据
     * @param totalCount 总记录数
     * @param pageSize   每页记录数
     * @param currPage   当前页数
     */
    public PageResult(List<T> list, int totalCount, int pageSize, int currPage) {
        this.list = list;
        this.totalCount = totalCount;
        this.pageSize = pageSize;
        this.currPage = currPage;
        this.totalPage = (int) Math.ceil((double) totalCount / pageSize);
    }

}