对于vo和po严格规范的同学来说,在使用mybatis-plus进行分页时每次都需要复制分页信息或者重写分页api。其实mybatis-plus早已为我们解决这个问题了,细心的同学会发现在IPage中有一个convert方法,没错!就是这个方法。以后写分页就可以这样写了
public IPage<UserVO> list(PageRequest request) {
IPage<UserPO> page = new Page(request.getPageNum(), request.pageSize());
LambdaQueryWrapper<UserPO> qw = Wrappers.lambdaQuery();
page = userMapper.selectPage(page, qw);
return page.convert(u->{
UserVO v = new UserVO();
BeanUtils.copyProperties(u, v);
return v;
});
}
其源码如下:
/**
* IPage 的泛型转换
*
* @param mapper 转换函数
* @param <R> 转换后的泛型
* @return 转换泛型后的 IPage
*/
@SuppressWarnings("unchecked")
default <R> IPage<R> convert(Function<? super T, ? extends R> mapper) {
List<R> collect = this.getRecords().stream().map(mapper).collect(toList());
return ((IPage<R>) this).setRecords(collect);
}
可知,其做了一个泛型的强制转换,同时保留了分页信息。
网友评论