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

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】首发,转载请注明出处

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容