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; 

 

posted @ 2020-06-17 15:13  木子李和三点水  阅读(261)  评论(0编辑  收藏  举报