SSM框架MyBatis 三种简单的分页查询
1. 基础分页查询(环境在第一天的配置中有)
mapper也就是dao
//查询总数@Select("select count(*) from book;")int selectCount();//分页查询@Select("select * from book limit #{currpage},#{size}")List<Book> selectPage(Map<String,Object> map);
测试类中调用
//推荐基础分页查询//总记录数int count = bm.selectCount();//当前页(currpage)和每页的大小(size)int currpage = 3;int size = 2;//如果小于0则令其为1if(currpage <= 0)currpage = 1;//总页数int countpage = count % size == 0 ? count / size : count / size + 1;if (currpage > countpage) currpage = countpage;System.out.println("总记录数" + count + "总页数" + countpage + "当前" + currpage +"页" + "每页" + size +"条数据");Map<String,Object> map = new HashMap<>();map.put("currpage",currpage * size - size);map.put("size",size);List<Book> books = bm.selectPage(map);System.out.println(books);
测试结果
2. MaBatis自带的RowBounds类
不推荐使用 因为原理是查找全部然后装进一个容器中读取想要的行数
mapper//Mybatis分页器 不推荐@Select("select * from book")List<Book> selectRow(RowBounds row);
//总记录数int count = bm.selectCount();//当前页(currpage)和每页的大小(size)int currpage = 3;int size = 2;//如果小于0则令其为1if(currpage <= 0)currpage = 1;//总页数int countpage = count % size == 0 ? count / size : count / size + 1;if (currpage > countpage) currpage = countpage;RowBounds rowBounds = new RowBounds(currpage * size - size,size);System.out.println(bm.selectRow(rowBounds));
3.插件PageHelper
通过MyBatis中的过滤器对查找所有的操作进行修改得到分页查询
3.1 配置依赖
<!-- pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.2</version></dependency>
3.2 配置文件中
spring 框架的入口文件
sf.setPlugins(new PageInterceptor());
3.3 分页查询
mapper
// 分页查询之PageHelpe
// @r
@Select("select * from book")
List<Book> query();
3.3.1 基础测试
第三页每页两条记录
PageHelper.startPage(3,2);PageInfo<Book> bookPageInfo = new PageInfo<>(bm.query());List<Book> list = bookPageInfo.getList();System.out.println(Arrays.toString(list.toArray()));
3.3.2 id降序
PageHelper.startPage(1,3,"bid desc");PageInfo<Book> bookPageInfo0 = new PageInfo<>(bm.query());System.out.println(bookPageInfo0.getList());
3.3.3 五个参数的解释
关于五个参数
第一个为 第几页
第二个为 每页的个数
第三个 是否查询总数
第四个 是否则正确判定(if 当前页为-1或者0 自动变为1)
第五个 若size为0且第五个参数为true 查询所有
(1)查询总数
PageHelper.startPage(1,2,true);PageInfo<Book> bookPageInfo1 = new PageInfo<>(bm.query());System.out.println( "(1)"+bookPageInfo1.getList());
结果
(2)加入正确处理页数操作
PageHelper.startPage(0,2,true,true,true);PageInfo<Book> bookPageInfo2 = new PageInfo<>(bm.query());System.out.println( "(2)"+bookPageInfo2.getList());
(3)最后一个为true且size = 0则会查询所有
PageHelper.startPage(1,0,true,true,true);PageInfo<Book> bookPageInfo1 = new PageInfo<>(bm.query());System.out.println(bookPageInfo1.getList());
结果太长导致无法显示完毕