代码拉取完成,页面将自动刷新
因为在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();
});
一样,就挺合理了。