其他分享
首页 > 其他分享> > 7、PageHelper分页查询

7、PageHelper分页查询

作者:互联网

1、MyBatis的分页方式:

逻辑分页与物理分页
1、逻辑分页:使用MyBatis自带的RowBounds进行分页,是一次性查询很多数据,然后再在结果中检索分页的数据。这样做弊端是需要消耗大量的内存、有内存溢出的风险、对数据库压力较大。
2、物理分页:使用分页插件PageHelper或者自己写sql分页(limit),是从数据库查询指定条数的数据,弥补了一次性全部查出的所有数据的种种缺点,比如需要大量的内存,对数据库查询压力较大等问题。

2、PageHelper的原理:

PageHelper是MyBatis提供的分页插件;首先是在Mybatis里面配置了分页拦截器(PageInterceptor),即在执行相关Sql之前会拦截做一点事情;通过setLocalPage()方法,将分页信息保存在当前线程中。查询方法与之处于同一个线程中,共享ThreadLocal中的数据。selectlist查询之后赋值给的List list。这个list是Page 类型。再将list放到PageInfo<>中即可。

3、PageHelper分页实现:

(1)、建工程:

建立Springboost工程;

(2)、改POM:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!--SpringBoot框架web项目起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--lombok插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <optional>true</optional>
        </dependency>

        <!--PageHelper插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.2</version>
        </dependency>
    </dependencies>

(3)、写YML:

server:
  port: 8081

spring:
  application:
    name: pagehelperdemo
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource    #当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver    #mysql驱动包
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
    druid:
      test-while-idle: false  #关闭空闲检测

mybatis:
  mapperLocations: classpath:mapper/*.xml    #resources下建mapper包

(4)、业务类:

    //实现类 
   @Autowired
    private PageDemoMapper pageDemoMapper;

    /**
     * PageHelper分页查询
     * @Param pageNum:页数
     * @Param pageSize:每页显示的条目
     * */
    @Override
    public PageInfo<PageDemo> selectPage(Integer pageNum , Integer pageSize) {
        log.info("页数:"+pageNum);
        log.info("每页显示的条目:"+pageSize);
        //查询数据库的时候会自动加上limit
        //PageDemoMapper: List<PageDemo> selectAllDemo();
        return PageHelper.startPage(pageNum, pageSize)
                .doSelectPageInfo(() -> pageDemoMapper.selectAllDemo());
    }    

 

标签:分页,spring,boot,查询,mysql,org,PageHelper
来源: https://www.cnblogs.com/Iven-L/p/16389669.html