乐优商场项目day07——品牌的查询
先去后台页面看一下 路由路径
根据路由,找到对应页面
前台页面,已经准备好了,不用我们去写。
我们要做的是去后台提供数据接口。
1. 根据数据库里的品牌数据,添加品牌实体类
@Table(name = "tb_brand")
public class Brand {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;// 品牌名称
private String image;// 品牌图片
private Character letter;
// getter setter
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Character getLetter() {
return letter;
}
public void setLetter(Character letter) {
this.letter = letter;
}
}
2.添加品牌类的 通用mapper
根据安装页面显示,我们应该写一个分页查询。
分析一下 请求方式,请求路径,以及请求参数
分页查询的响应结果:
- total:总条数
- items:当前页数据
- totalPage:总页数
根据这些分析,我们来封装一个分页查询结果类PageResult,这个类在其他的服务中可能也会用到,所以我们放到 leyou-common中:
public class PageResult<T> {
private Long total;// 总条数
private Integer totalPage;// 总页数
private List<T> items;// 当前页数据
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public List<T> getItems() {
return items;
}
public void setItems(List<T> items) {
this.items = items;
}
}
然后在leyou-item-service工程的pom.xml中引入leyou-common的依赖:
创建一个 BrandService:
创建一个 BrandController :
编写这个BrandController类的具体方法:
@Controller
@RequestMapping("brand")
public class BrandController {
@Autowired
private BrandService brandService;
/**
* 根据查询条件分页并排序查询品牌信息
* @param key
* @param page
* @param rows
* @param sortBy
* @param desc
* @return
*/
@GetMapping("page")
private ResponseEntity<PageResult<Brand>> queryBrandByPage(
@RequestParam(value = "key", required = false)String key,
@RequestParam(value = "page", defaultValue = "1")Integer page,
@RequestParam(value = "rows", defaultValue= "5")Integer rows,
@RequestParam(value = "sortBy", required = false)String sortBy,
@RequestParam(value = "desc", required = false)Boolean desc
){
PageResult<Brand> result = this.brandService.queryBrandsByPage(key, page, rows, sortBy, desc);
if (result == null || CollectionUtils.isEmpty(result.getItems())){
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(result);
}
}
去 BrandService 中实现 queryBrandsByPage 方法:
@Service
public class BrandService {
@Autowired
private BrandMapper brandMapper;
/**
* 根据查询条件分页并排序查询品牌信息
* @param key
* @param page
* @param rows
* @param sortBy
* @param desc
* @return
*/
public PageResult<Brand> queryBrandsByPage(String key, Integer page, Integer rows, String sortBy, Boolean desc) {
//初始化example对象
Example example = new Example(Brand.class);
Example.Criteria criteria = example.createCriteria();
//根据name模糊查询,或者根据首字母查询
if (StringUtils.isNotBlank(key)){
criteria.andLike("name", "%" + key + "key").orEqualTo("letter",key);
}
//添加分页条件
PageHelper.startPage(page,rows);
//添加排序条件
if (StringUtils.isNotBlank(sortBy)){
example.setOrderByClause(sortBy + " " + (desc ? "desc" : "asc"));
}
List<Brand> brands = this.brandMapper.selectByExample(example);
//包装成pageInfo
PageInfo<Brand> pageInfo = new PageInfo<>(brands);
//包装成分页结果返回
return new PageResult<>(pageInfo.getTotal(),pageInfo.getList());
}
}
给PageResult类加上几个构造函数,来包装分页结果:
然后重启 leyou-item 服务,刷新页面:
根据查询条件分页并排序查询品牌信息 就完成了!
感兴趣的还可以看一下: