PageHelper插件在Mybatis中的简易使用
一.引入,jsqlparser 和 pagehelper 两个开源包
jsqlparser下载地址:https://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/
pagehelper下载地址:https://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/
二.在mybatis-config.xml 配置文件中,配置分页拦截器
<plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageInterceptor"> </plugin> </plugins>
配置文件中遵从以下顺序原则:
<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>
三.举例:按商品条件分页查询
1.DAO层有通用按条件查询方法
List<Goods> getGoodsCondition(Goods goods);
2.对应Mapper写对应的Sql
<select id="getGoodsCondition" parameterType="Goods" resultType="Goods"> select * from mall_goods <where> <if test="name!=null and name!=''"> <bind name="goodsName" value="'%' + name + '%'"/> name like #{goodsName} </if> <if test="categoryId!=null and categoryId!=0"> and author=#{author} </if> <if test="code!=null and code!=''"> and uptime <![CDATA[>=]]>#{startUpTime} </if> <if test="isNewer!=null and isNewer!=''"> and isnewer=#{isNewer} </if> <if test="isHoter!=null and isHoter!=''"> and ishoter=#{isHoter} </if> <if test="saleOnDate!=null and saleOnDate!=''"> and saleDate>=#{saleOnDate} </if> <if test="status!=null and status!=''"> and status=#{status} </if> </where> </select>
3.Service层调用DAO查询,并使用分页插件
public class GoodsService { public PageBean<Goods> getByPage(int page,Goods goods){ int pagesize=2; PageBean<Goods> pageBean=new PageBean<>(); pageBean.setCurrPage(page); pageBean.setPageSize(pagesize); GoodsDAO goodsDAO = MallUtils.getDAO(GoodsDAO.class); //关键语句1,调用PageHelper中,startPage静态方法 //page: 当前页码 pagesize:定义的每一页数据量 PageHelper.startPage(page,pagesize); List<Goods> goodsList=goodsDAO.getGoodsCondition(goods); //关键语句2,使用PageInfo类一个实例接收查询结果 PageInfo<Goods> pageInfo= new PageInfo<>(goodsList); //将pageinfo中的值赋给定义的分页数据信息实体 pageBean.setData(pageInfo.getList()); pageBean.setNumOfPage(pageInfo.getSize()); pageBean.setTotalNum((int)pageInfo.getTotal()); pageBean.setTotalPage(pageInfo.getPages()); return pageBean; } }
Pageinfo属性表:
当前页 private int pageNum; 每页的数量 private int pageSize; 当前页的数量 private int size; //由于startRow和endRow不常用,这里说个具体的用法 //可以在页面中"显示startRow到endRow 共size条数据" 当前页面第一个元素在数据库中的行号 private int startRow; 当前页面最后一个元素在数据库中的行号 private int endRow; 总记录数 private long total; 总页数 private int pages; 结果集 private List<T> list; 第一页 private int firstPage; 前一页 private int prePage; 是否为第一页 private boolean isFirstPage = false; 是否为最后一页 private boolean isLastPage = false; 是否有前一页 private boolean hasPreviousPage = false; 是否有下一页 private boolean hasNextPage = false; 导航页码数 private int navigatePages; 所有导航页号 private int[] navigatepageNums;