Skip to content

如何自定义自己的Pager类

为什么要自定义,因为不同开发需要,他们字段名命名不一样

1. 继承 IPager接口

java
public class Pager<T> implements IPager<T> {
    
}

2. 实现set方法

java
public class Pager<T> implements IPager<T> {
    @Override
    public <V> void set(PagerField<V> field, V value) {
        if (PagerField.TOTAL == field) {
            //设置总条数
            this.setTotal((Integer) value);
            return;
        }
        if (PagerField.RESULTS == field) {
            //设置List结果
            this.setResults((List) value);
            return;
        }
        throw new RuntimeException("not support field: " + field);
    }
}

3. 实现get方法

java
public class Pager<T> implements IPager<T> {

    @Override
    public <V> void set(PagerField<V> field, V value) {
        if (PagerField.TOTAL == field) {
            //设置总条数
            this.setTotal((Integer) value);
            return;
        }
        if (PagerField.RESULTS == field) {
            //设置List结果
            this.setResults((List) value);
            return;
        }
        throw new RuntimeException("not support field: " + field);
    }
    
    @Override
    public <V> V get(PagerField<V> field) {
        if (PagerField.IS_EXECUTE_COUNT == field) {
            //返回是否执行count查询 ,isExecuteCount改成你自己的方法或字段
            return (V) this.isExecuteCount();
        }
        if (PagerField.NUMBER == field) {
            //返回页码 ,getNumber改成你自己的方法或字段
            return (V) this.getNumber();
        }
        if (PagerField.SIZE == field) {
            //返回每页条数 ,getSize改成你自己的方法或字段
            return (V) this.getSize();
        }
        throw new RuntimeException("not support field: " + field);
    }
}

4. 接下来就可以使用自己的Pager类了

java
@Service
public class Test{

    @Autowired
    private SysUserMapper sysUserMapper;

    public void demo() {
        //new 或者 从其他地方传参
        Pager<SysUser> pager = ...;
        //直接调用paging方法分页,然后用 pager 直接接收
        pager = QueryChain.of(sysUserMapper)
            .eq(SysUser::getId,1)
            .like(SysUser::getUserName,"xxx")
            .paging(pager);
    }
}