引言: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;如何使用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](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<>(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}
测试结果:控制器:每个人的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>