泛型的基础理解和pagehelp的优化用法
<T> T
表示返回值是一个泛型,传递啥,就返回啥类型的数据,而单独的T
就是表示限制你传递的参数类型。首先理解list集合(集合中一般为限制list中对象的类型)中对泛型的要求,再去理解类的泛型。类上泛型特殊的就是制定的T可以作为类中的一个属性,当做一个入参,下面是常见的分页入参时<T>的使用。这么做有个优点:
作为分页条件的入参,泛型T通用无比,表示为我也不知道会放什么类型,你就留着就行,当我新建这个类的时候会给你指定T的类型,到时候你再把我其中的属性T param转成对应类型就行了,多重入参都可以使用这个类,只要指定了类型。
前后端分离 前端和后端定义入参的时候,到了后端再指定T的具体类型,体现在controller层方便维护,可以准确的知道入参的除了分页的固定属性(pageNum等)外 T 的类型
<T> T
用法
最近用到的是使用分页组件时pagehelper中定义的pageParam,这个<T> T
表示的是返回值T是泛型,T是一个占位符,用来告诉编译器,这个东西先给我留着,等我编译的时候,告诉你。
public class PageParam<T> implements IPage {
// description = "页码", defaultValue = 1
private Integer pageNum = 1;
// description = "页数", defaultValue = 20
private Integer pageSize = 20;
// description = "排序", example = "id desc"
private String orderBy;
// description = "参数"
private T param;
public PageParam<T> setOrderBy(String orderBy) {
this.orderBy = orderBy; // 正则表达式匹配参数值只能含有order by语法中必要的值,例如字段名,desc or asc
return this;
}
public Integer getPageNum() {
return pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public T getParam() {
return param;
}
public void setParam(T param) {
this.param = param;
}
public String getOrderBy() {
return orderBy;
}
}
controller中
返回值,直接写T
表示限制参数的类型,看下面的getPage方法即可(入参PageParam指定了泛型T为StaffVO)
@RestController
@RequestMapping("/api/test")
public class TestController {
@Autowired
TemplateService template;
@PostMapping(value = "/list")
public List<StaffVO> getAll(@RequestBody StaffVO pageParam){
return template.list(pageParam);
}
@GetMapping(value = "/page")
public PageInfo<StaffVO> getPage(@RequestBody PageParam<StaffVO> pageParam){
return template.page(pageParam);
}
}
servicebase
public interface BaseService<Param, Result> {
/**
* 分页查询
*
* @param param 请求参数DTO
* @return 分页集合
*/
default PageInfo<Result> page(PageParam<Param> param) {
return PageHelper.startPage(param.getPageNum(),param.getPageSize(),param.getOrderBy()).doSelectPageInfo(() -> list(param.getParam()));
}
/**
* 集合查询
*
* @param param 查询参数
* @return 查询响应
*/
List<Result> list(Param param);
}
service
public interface TemplateService extends BaseService<StaffVO, StaffVO>{
}
serviceimpl
@Service
public class TemplateServiceImpl implements TemplateService {
@Autowired
TestMapper testmapper;
@Override
public List<StaffVO> list(StaffVO param) {
// TODO Auto-generated method stub
return testmapper.findAll();
}
}
上面这一套是pagehelper的处理真的好,记录下来以便以后用。