分页查询


获取Page实例

  • 要想分页,首先要获得分页工具类 Page 的实例,此类有一系列方法辅助你进行分页查询
  • 以下示例三种方式获得 Page 的实例
  1. @Test
  2. public void test4_1() {
  3. // 方式 1,通过构造方法
  4. Page page = new Page(1, 10); // 当前页、页大小
  5. System.out.println(page);
  6. // 方式2,根据其静态方法
  7. Page page2 = Page.getPage(1, 10); // 当前页、页大小
  8. System.out.println(page2);
  9. // 方式3,通过 start 来构建
  10. Page page3 = new Page();
  11. page3.setStart(4); // 直接设置起始位置
  12. page.setPageSize(10);
  13. System.out.println(page3);
  14. }
  • 对于大多数数据库的分页都是,通过 startpageSize 两个字段来控制分页的
  • 方式1和方式2会通过你传入的当前页和页大小自动计算 start
  • 方式3会直接使用你设置的 start

分页查询 - 映射为 List< Model >

  1. @Test
  2. public void test4_2() {
  3. SqlFly sqlFly = SqlFlyFactory.getSqlFly();
  4. String sql = "select * from sys_user";
  5. Page page = new Page(1, 2);
  6. List<SysUser> list = sqlFly.getListPage(page, SysUser.class, sql);
  7. System.out.println("通过分页查询到" + list.size() + "条数据,分别为:");
  8. for (SysUser user : list) {
  9. System.out.println(user);
  10. }
  11. }

分页查询 - 映射为 List< Map >

  1. @Test
  2. public void test4_3() {
  3. SqlFly sqlFly = SqlFlyFactory.getSqlFly();
  4. String sql = "select * from sys_user";
  5. Page page = new Page(1, 2);
  6. List<Map<String, Object>> listMap = sqlFly.getMapListPage(page, sql);
  7. System.out.println("当前用户表共有" + listMap.size() + "条数据,分别为:");
  8. for (Map<String, Object> map : listMap) {
  9. System.out.println(map);
  10. }
  11. }

切换分页方式

  • 很简单:只需要更改 FlyObjects.paging 接口的实现类就可以了

    1. // 测试4-4 切换分页方式
    2. @Test
    3. public void test4_4() {
    4. // 切换为 SqlServer 分页方式
    5. FlyPaging paging = new FlyPagingSqlServer();
    6. FlyObjects.setPaging(paging);
    7. // 切换为 Oracle 分页方式
    8. FlyPaging paging2 = new FlyPagingOracle();
    9. FlyObjects.setPaging(paging2);
    10. }

自定义分页方式

如果你明白了如何切换分页方式,就不难理解如何自定义分页了

1、继承FlyPaging接口,实现getPagingSql方法

  1. // 自定义SqlFly的分页实现类
  2. public class FlyPagingMycustom implements FlyPaging{
  3. // 实现此方法,返回分页形式的sql,以备SqlFly的调用
  4. @Override
  5. public String getPagingSql(String sql, Page page) {
  6. String newsql = sql + " limit " + page.getStart() + "," + page.getPageSize();
  7. return newsql;
  8. }
  9. }

2、更改 FlyObjects.paging 接口的实现类

  1. @Test
  2. public void test4_5() {
  3. FlyPaging paging = new FlyPagingMycustom();
  4. FlyObjects.setPaging(paging);
  5. }

springboot的方式

  • springboot 自定义分页方式时,可以无需手动进行 FlyObjects.setPaging(paging) 这一步操作,
  • 只需要重写 FlyPaging 接口,加上 @Component 注解,并且保证被 springboot 包扫描机制扫描到就可以了
  • 不清楚SpringBoot包扫描机制的同学请自行百度