泛型的基础理解和pagehelp的优化用法

本文介绍了泛型的基础概念及其在分页查询中的应用。通过具体的代码示例,展示了如何使用泛型来提高代码的复用性和灵活性,并实现了一个基于PageHelper的通用分页查询框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

泛型的基础理解和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的处理真的好,记录下来以便以后用。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值