首页 > 其他分享 >myBatis-分页

myBatis-分页

时间:2023-04-06 21:23:57浏览次数:52  
标签:语句 分页 System PageHelper println myBatis out

1.前言

MyBatis,作为目前流行的ORM框架,大大方便了日常开发。而对于分页查询,虽然可以通过SQL的limit语句实现,但是比较繁琐。

1.1.Limit方式

以前的分页查询,拼接sql 语句:

  BookMapper.java接口:

//根据limit 语句拼接,进行相应的分页
List<Book> selectBySQL(@Param("start")int start, @Param("offset") int offset);

  BookMapper.xml SQL语句:

<!-- 分页查询 -->
<select id="selectBySQL" resultMap="BaseResultMap" parameterType="com.zking.ssm.model.Book" >
    select
    <include refid="Base_Column_List" />
    from t_book
    limit #{start},#{offset}
</select>

这种分页是放置在sql 语句里面的, 很可能每一个查询的sql 语句都要在最后添加一下这个语句,并且还非得传入两个参数,可重复利用性低,尤其是条件查询时。

1.2.RowBounds方式

通过RowBounds实现分页和通过数组方式分页原理差不多,都是一次获取所有符合条件的数据,然后在内存中对大数据进行操作,实现分页效

果。(不推荐使用

 一次性从数据库获取的数据可能会很多,对内存的消耗很大,可能导致性能变差,甚至引发内存溢出。

  BookMapper.java接口:

List<Book> selectBySQL(RowBounds rowBounds);

  BookMapper.xml SQL语句:

语句与前面的一样,不具有侵入性。 不用改变相应的sql语句。 只需要在要分页的方法接口上添加 RowBounds 对象参数即可。

<select id="selectBySQL" resultType="com.zking.ssm.model.Book">
select <include refid="Base_Column_List"/> from t_book
</select>

  测试

 

@Test
public void demo(){
    int page=1;
    int rows=10;
    RowBounds rowBounds=new RowBounds((page-1)*rows,rows);
    List<Book> books = bookService.selectBySQL(rowBounds);
    books.forEach(System.out::println);
}

 

 

 

2.PageHelper介绍

PageHelper 是适用于 MyBatis 框架的一个分页插件,使用方式极为便捷,支持任何复杂的单表、多表分页查询操作。它支持基本主流与常用的数据库,例如mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。

官方网站:https://pagehelper.github.io/

下载地址:https://github.com/pagehelper/Mybatis-PageHelper

2.1.添加依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>

2.2.配置插件

在MyBatis-config.xml中添加 `<plugins>`。

<configuration>
      <typeAliases></typeAliases>

    <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    </plugins>

      <environments>...</environments>
</configuration>

 

 2.3.PageHelper.startPage

在你需要进行分页的Mybatis方法前调用PageHelper.startPage静态方法即可,紧跟在这个方法后的第一个Mybatis查询方法会被进行分页。

 注意:只有紧跟着PageHelper.startPage()的sql语句才被pagehelper起作用

//设置分页处理
if (null != pageBean && pageBean.isPagination()) {
PageHelper.startPage(pageBean.getPage(), pageBean.getRows());
}
List<Book> books = bookService.selectAllBooks();
for(Book book : books){
System.out.println(book);
}

2.4.获取分页信息

使用插件后,查询实际返回的是Page<E>,而非List<E>,Page继承了ArrayList,同时还包含分页相关的信息。

Page<Book> page = (Page<Book>)list;
System.out.println("页码:" + page.getPageNum());
System.out.println("页大小:" + page.getPageSize());
System.out.println("总记录:" + page.getTotal());

使用PageInfo方式:

PageInfo pageInfo = new PageInfo(list);
System.out.println("页码:" + pageInfo.getPageNum());
System.out.println("页大小:" + pageInfo.getPageSize());
System.out.println("总记录:" + pageInfo.getTotal());

标签:语句,分页,System,PageHelper,println,myBatis,out
From: https://www.cnblogs.com/wujingyu123/p/17294203.html

相关文章

  • vue 手写分页
       data:{        crossing_status:CROSSING_STATUS,        crossing_list:[],        time:null,        log:{          page:1,          pages:......
  • MyBatis
    MyBatisMyBatis是一款持久层框架,用于简化JDBC开发。持久层负责将数据保存到数据库的代码JavaEE三层架构:表现层、业务层、持久层框架框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型在框架的基础上建构软件编写更加高效、规范、通用、可拓展JDB......
  • mysql 两百万数据 深分页性能优化
    --ddlCREATETABLE`student`( `id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'主键', `user_no`varchar(50)DEFAULT''COMMENT'学号', `user_name`varchar(50)DEFAULT''COMMENT'姓名', `score`decimal(10,2)DEFAU......
  • ShardingSphereJDBC+MybatisPlus实现分库分表
    前言这篇是ShardingSphere-JDBC+Springboot+MybatisPlus+Druid分库分表的简单例子,我们用一个订单表为例,通过简单配置实现数据分片到多个数据库的多个表中。主要配置和代码已经在文中给出,完整例子可以参考GitHub-fruitbasket-litchi-shardingjdbc。准备数据库在一个或两个My......
  • 使用PHP将长文章分页
    当文章内容特长时,为了方便阅读和页面展示我们一般将内容分页来显示。而一般分页处理是在后台发布文章的时候就将提交的内容生成多个分页后的静态文件。本文我们结合实例来讲解采用PHP动态将长文章内容进行分页处理。如何分页手动分页:一般在编辑内容时加入特殊分页标记,如{pages},提交......
  • 分页查询
    DQL-分页查询select字段列表from表名limit起始索引,查询记录数;注意:起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数分页查询是数据库的方言,不同的数据库有不同的实现,mysql中是limit如果查询的是第一页的数据,起始索引可以省略,直接简写为limit10 代码:select......
  • 模拟mybatis接口动态注册过程
    思考  前文提到2种方式动态加载bean到容器,这里我们模拟一下mybatis手动注册Bean到容器的过程。模拟有啥好处,主要是为了方便你理解如何手动注册Bean的过程及mybatis的设计思想。毕竟这个才是spring的核心内容。    首先思考一下问题    如果你实现这个问题,你准备怎......
  • MyBatis-Plus 写 Join 联表查询
    效果展示背景众所周知,MybatisPlus封装的mapper不支持join,如果需要支持就必须自己去实现。但是对于大部分的业务场景来说,都需要多表join,要不然就没必要采用关系型数据库了。使用方法仓库地址https://gitee.com/best_handsome/mybatis-plus-join安装Maven<depend......
  • MyBatis的执行流程及核心组件
    MyBatis的执行流程及核心组件如图所示。基本组件介绍Configuration用于描述MyBatis的主配置信息,其他组件需要获取配置信息时,直接通过Configuration对象获取。除此之外,MyBatis在应用启动时,将Mapper配置信息、类型别名、TypeHandler等注册到Configuration组件中,其他组件需要这......
  • MyBatisPlus——条件查询——null值处理与查询投影
    DQL编程控制条件查询——设置查询条件格式一:常规格式 //方式一:按条件查询 QueryWrapperqw=newQueryWrapper(); //10岁到30岁之间的用户 qw.gt("age",10); qw.lt("age",30); List<User>users=userDao.selectList(qw); System.out.println(users);格式......