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

file 引言: PageHelper是国内很是优秀的一款开源的mybatis分页插件,它支持基本主流与经常使用的数据库, 例如mysql、 oracle、mariaDB、 DB二、 SQLite、Hsqldb等。今天墨白就给你们聊聊PageHelper这款分页插件,下面是PageHelper开源地址,感兴趣的小伙伴能够去看一下 PageHelper在 github 的项目地址:java

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

PageHelper在 gitosc 的项目地址:mysql

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

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

1https://pagehelper.github.io/

访问官网后的页面,官网里面有详细的Demo,今天咱们来照着官网本身动手敲个Demo; file 如何使用PageHelper? 1.在本身的项目添加依赖,maven项目在父工程添加最新版本,最新版本是5.1.8github

1<dependency>
2    <groupid>com.github.pagehelper</groupid>
3    <artifactid>pagehelper</artifactid>
4    <version>5.1.8</version>
5</dependency>

2.在数据访问层Spring 配置文件中配置拦截器插件,代码以下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 时,直接根据参数进行查询。sql

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

第一种mybatis

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

第二种oracle

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接口app

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](https://my.oschina.net/u/1162528)
 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&lt;&gt;(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】首发,转载请注明出处</user></company></company></company></company></user></company></country></country>

相关文章
相关标签/搜索