美文网首页
带你学习最简单的分页插件PageHelper

带你学习最简单的分页插件PageHelper

作者: 框架师 | 来源:发表于2019-11-08 09:14 被阅读0次
    file

    引言:
    PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库, 例如mysql、 oracle、mariaDB、 DB2、 SQLite、Hsqldb等。今天墨白就给大家聊聊PageHelper这款分页插件,下面是PageHelper开源地址,感兴趣的小伙伴可以去看一下
    PageHelper在 github 的项目地址:

    1https://github.com/pagehelper/Mybatis-PageHelper
    

    PageHelper在 gitosc 的项目地址:

    1 http://git.oschina.net/free/Mybatis_PageHelper>
    

    先介绍一下这款插件PageHelper
    官网地址:

    1https://pagehelper.github.io/
    

    访问官网后的页面,官网里面有详细的Demo,今天我们来照着官网自己动手敲个Demo;


    file

    如何使用PageHelper?
    1.在自己的项目添加依赖,maven项目在父工程添加最新版本,最新版本是5.1.8

    1<dependency>
    2    <groupId>com.github.pagehelper</groupId>
    3    <artifactId>pagehelper</artifactId>
    4    <version>5.1.8</version>
    5</dependency>
    

    2.在数据访问层Spring 配置文件中配置拦截器插件,代码如下

     1<bean class="org.mybatis.spring.SqlSessionFactoryBean">
     2        <property name="dataSource" ref="dataSource"/>
     3        <!--配置PageHelper拦截器插件-->
     4        <property name="plugins">
     5            <array>
     6                <bean class="com.github.pagehelper.PageInterceptor">
     7                    <property name="properties">
     8                        <value>
     9                            helperDialect=mysql
    10                            reasonable=true
    11                        </value>
    12                    </property>
    13                </bean>
    14            </array>
    15        </property>
    16    </bean>
    

    3.PageHelper分页插件参数介绍
    这里我只介绍两个常用的,详细的可以去看官网API文档
    helperDialect:
    分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值
    1oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
    特别注意:使用 SqlServer2012 数据库时,需要手动指定为 sqlserver2012,否则会使用 SqlServer2005 的方式进行分页。你也可以实现 AbstractHelperDialect,然后配置该属性为实现类的全限定名称即可使用自定义的实现方法。
    reasonable:
    分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。

    4.在代码中使用的两种方式:

    第一种

    1// 此语句后的第一个select查询自动会被分页
    2PageHelper.startPage(1, 10); 
    3// 这里的查询会自动分页
    4List<Country> list = countryMapper.selectIf(1);
    

    第二种

     1//获取第1页,10条内容,默认查询总数count
     2PageHelper.startPage(1, 10);
     3List<Country> list = countryMapper.selectAll();
     4//用PageInfo对结果进行包装
     5PageInfo page = new PageInfo(list);
     6//测试PageInfo全部属性
     7//PageInfo源码中可以看到包含了非常全面的分页属性
     8assertEquals(1, page.getPageNum());
     9assertEquals(10, page.getPageSize());
    10assertEquals(1, page.getStartRow());
    11assertEquals(10, page.getEndRow());
    12assertEquals(183, page.getTotal());
    13assertEquals(19, page.getPages());
    14assertEquals(1, page.getFirstPage());
    15assertEquals(8, page.getLastPage());
    16assertEquals(true, page.isFirstPage());
    17assertEquals(false, page.isLastPage());
    18assertEquals(false, page.isHasPreviousPage());
    19assertEquals(true, page.isHasNextPage());
    

    使用PageHelper
    配置好了上面的坐标和Spring配置文件以后,我们直接开始使用PageHelper,,每个人的表数据可能都不一样,大家根据需求自己来玩,代码如下
    Mapper接口

    1/**
    2 * CompanyMapper接口
    3*/
    4public interface CompanyMapper {
    5   //查询全部
    6   List<Company> findAll();
    7}
    

    Mapper映射

    1 <!--查询全部-->
    2    <select id="findAll" resultMap="BaseResultMap">
    3      select * from ss_company where companyId=#{companyId}
    4</select>
    

    Service接口

    1public interface CompanyService {
    2   // 分页查询
    3   PageInfo<User> findByPage(int pageNum, int PageSize);
    4   //查询所有
    5   List<Company> findAll();
    6}
    

    impl实现

     1 // 注入Mapper
     2 @Autowired
     3 private CompanyMapper companyMapper;
     4
     5@Override
     6public PageInfo<Company> findByPage(int pageNum, int pageSize) {
     7    // 开始分页, PageHelper组件会自动对其后的第一条查询查询分页
     8    PageHelper.startPage(pageNum,pageSize);
     9    // 调用dao查询
    10    List<Company> list = companyMapper.findAll();
    11    // 创建PageInfo对象封装分页结果,传入查询集合。会自动计算分页参数
    12    PageInfo<Company> pageInfo = new PageInfo<>(list);
    13    return pageInfo;
    14}
    

    单元测试

     1@RunWith(SpringJUnit4ClassRunner.class)
     2@ContextConfiguration("classpath*:spring/applicationContext-*.xml")
     3public class UserServiceImplTest {
     4    // 注入service
     5    @Autowired
     6    private CompanyService companyMapper;
     7
     8    @Test
     9    public void findByPage(){
    10        PageInfo<User> pageInfo = companyMapper.findByPage(1, 2);
    11        System.out.println(pageInfo);
    12    }
    13}
    

    测试结果:


    file

    控制器:每个人的Controller都不一样,我这里给个模板你们,不明白的可以在后台留言,或者是在群里提问,
    仅作参考:

     1   @Autowired
     2   private CompanyService companyService;
     3
     4   @RequestMapping("/***")
     5   public ModelAndView findByPage(
     6         @RequestParam(defaultValue = "1") int pageNum,
     7         @RequestParam(defaultValue = "5") int pageSize) {
     8
     9      ModelAndView mv = new ModelAndView();
    10      mv.addObject("pageInfo",pageInfo);
    11      mv.setViewName("详情列表");
    12      return mv;
    13   }
    14}
    

    今天的内容就到这里了,加油!!!明天见

    本文由公众号【框架师 ,ID:mohu121】首发,转载请注明出处

    相关文章

      网友评论

          本文标题:带你学习最简单的分页插件PageHelper

          本文链接:https://www.haomeiwen.com/subject/rtcibctx.html