746 Star 2.8K Fork 834

abel533 / Mybatis_PageHelper

 / 详情

建议加强类型标注

已完成
创建于  
2020-01-12 23:31

因为在github上提了issue后,发现上面的issue已经很久无人回复了,所以发到这里来看看。

功能建议

现在使用pagehelper的过程中,深感类型标注还不够多。
比如PageHelper.startPage这种方法,居然返回值是Page<Object>,需要类型约束的时候只能手动指定,比如PageHelper.<Permission>startPage。这实在是有碍观瞻,而且有可能出现问题。
还有像ISelect这样的接口,居然也没有泛型约束。
另外ISelect里可以执行多条sql也是一个容易引起误解的操作,实测返回的值就是第一条sql的值,之后的值都被抛弃了。甚至可以写出这样的语句来:

PageHelper.startPage(IPage page).doSelectPage(() -> {
			roleMapper.selectAll();
			permissionMapper.selectAll();
		});

这样的设计显然不合理,究竟该返回Role还是Permission?
而且,我甚至可以这样写:

Permission permission = PageHelper.<Permission>startPage(IPage page).doSelectPage(() -> {
			roleMapper.selectAll();
			permissionMapper.selectAll();
		}).getResult().get(0);

虽然代码能通过编译,但实际上Page的泛型参数是Role不是Permission。这句代码执行get(0)时会爆出java.lang.ClassCastException。
所以我建议改成Supplier<T>这种,由Supplier<T>.get()中的返回语句决定究竟哪条sql的结果作为返回值。
这样下来,用起来感觉就像

var page = PageHelper.startPage(IPage page).doSelectPage(()->{
return userMapper.selectAll();
});

一样,就挺合理了。

评论 (1)

蓝色的梦想 创建了任务

保留github,关闭当前。

abel533 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
8363 free 1578914558
Java
1
https://gitee.com/free/Mybatis_PageHelper.git
git@gitee.com:free/Mybatis_PageHelper.git
free
Mybatis_PageHelper
Mybatis_PageHelper

搜索帮助