当前位置:   article > 正文

MyBatis使用PageHelper实现分页查询_mybatis分页pagehelper

mybatis分页pagehelper

MyBatis的分页功能可以使用PageHelper来实现。

【实例】MyBatis使用PageHelper实现分页查询,并显示分页信息。执行效果如下图:

1、创建数据表

在MySQL数据库中创建用户信息表(tb_user),并添加数据。

  1. -- 判断数据表是否存在,存在则删除
  2. DROP TABLE IF EXISTS tb_user;
  3. -- 创建“用户信息”数据表
  4. CREATE TABLE IF NOT EXISTS tb_user
  5. (
  6. user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
  7. user_name VARCHAR(50) NOT NULL COMMENT '用户姓名',
  8. province VARCHAR(50) NOT NULL COMMENT '省份',
  9. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间'
  10. ) COMMENT = '用户信息表';
  11. -- 添加数据
  12. INSERT INTO tb_user(user_name,province) VALUES
  13. ('pan_junbiao的博客_01','广东省'),('pan_junbiao的博客_02','黑龙江省'),('pan_junbiao的博客_03','山东省'),('pan_junbiao的博客_04','安徽省'),('pan_junbiao的博客_05','黑龙江省'),
  14. ('pan_junbiao的博客_06','江苏省'),('pan_junbiao的博客_07','黑龙江省'),('pan_junbiao的博客_08','广东省'),('pan_junbiao的博客_09','陕西省'),('pan_junbiao的博客_10','广东省'),
  15. ('pan_junbiao的博客_11','广东省'),('pan_junbiao的博客_12','江苏省'),('pan_junbiao的博客_13','陕西省'),('pan_junbiao的博客_14','安徽省'),('pan_junbiao的博客_15','山东省'),
  16. ('pan_junbiao的博客_16','陕西省'),('pan_junbiao的博客_17','安徽省'),('pan_junbiao的博客_18','江苏省'),('pan_junbiao的博客_19','黑龙江省'),('pan_junbiao的博客_20','安徽省'),
  17. ('pan_junbiao的博客_21','江苏省'),('pan_junbiao的博客_22','广东省'),('pan_junbiao的博客_23','安徽省'),('pan_junbiao的博客_24','陕西省'),('pan_junbiao的博客_25','广东省'),
  18. ('pan_junbiao的博客_26','广东省'),('pan_junbiao的博客_27','安徽省'),('pan_junbiao的博客_28','山东省'),('pan_junbiao的博客_29','山东省'),('pan_junbiao的博客_30','黑龙江省'),
  19. ('pan_junbiao的博客_31','广东省'),('pan_junbiao的博客_32','江苏省'),('pan_junbiao的博客_33','陕西省'),('pan_junbiao的博客_34','安徽省'),('pan_junbiao的博客_35','山东省');

2、创建项目

(1)创建SpringBoot项目,项目结构如下图:

(2)添加pom.xml配置信息

在pom.xml配置文件中添加PageHelper、 MySQL的JDBC数据库驱动。

  1. <!-- SpringBoot/MyBatis使用PageHelper分页控件 -->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper-spring-boot-starter</artifactId>
  5. <version>1.2.13</version>
  6. </dependency>
  7. <!-- MySQL的JDBC数据库驱动 -->
  8. <dependency>
  9. <groupId>mysql</groupId>
  10. <artifactId>mysql-connector-java</artifactId>
  11. <version>8.0.20</version>
  12. </dependency>

(3)配置相关信息

将默认的application.properties文件的后缀修改为“.yml”,即配置文件名称为:application.yml,并配置以下信息:

  1. spring:
  2. #DataSource数据源
  3. datasource:
  4. url: jdbc:mysql://localhost:3306/db_admin?useSSL=false&amp
  5. username: root
  6. password: 123456
  7. driver-class-name: com.mysql.cj.jdbc.Driver
  8. #MyBatis配置
  9. mybatis:
  10. type-aliases-package: com.pjb.entity #别名定义
  11. configuration:
  12. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定 MyBatis 所用日志的具体实现,未指定时将自动查找
  13. map-underscore-to-camel-case: true #开启自动驼峰命名规则(camel case)映射
  14. lazy-loading-enabled: true #开启延时加载开关
  15. aggressive-lazy-loading: false #将积极加载改为消极加载(即按需加载),默认值就是false
  16. lazy-load-trigger-methods: "" #阻挡不相干的操作触发,实现懒加载
  17. cache-enabled: true #打开全局缓存开关(二级环境),默认值就是true
  18. #MyBatis使用pageHelper分页
  19. pagehelper:
  20. helper-dialect: mysql
  21. reasonable: true
  22. support-methods-arguments: true

配置说明:

helper-dialect:配置使用哪种数据库语言,不配置的话pageHelper也会自动检测。

reasonable:在启用合理化时,如果 pageNum<1,则会查询第一页;如果 pageNum>pages,则会查询最后一页。

support-methods-arguments:支持通过Mapper接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。

2.1 创建实体类(Entity层)

在com.pjb.entity包中,创建UserInfo类(用户信息实体类)。

  1. package com.pjb.entity;
  2. import org.springframework.stereotype.Component;
  3. import java.util.Date;
  4. /**
  5. * 用户信息实体类
  6. * @author pan_junbiao
  7. **/
  8. @Component
  9. public class UserInfo
  10. {
  11. private int userId; //用户编号
  12. private String userName; //用户姓名
  13. private String province; //省份
  14. private Date createTime; //注册时间
  15. //省略getter与setter方法...
  16. @Override
  17. public String toString()
  18. {
  19. return "编号:" + this.getUserId() +" 姓名:" + this.getUserName() + " 省份:" + this.getProvince();
  20. }
  21. }

在com.pjb.entity包中,创建UserSearchParam类(用户查询条件类)。

  1. package com.pjb.entity;
  2. /**
  3. * 用户查询条件类
  4. * @author pan_junbiao
  5. **/
  6. public class UserSearchParam
  7. {
  8. private String userName; //用户姓名
  9. private String province; //省份
  10. //省略getter与setter方法...
  11. }

2.2 数据库映射层(Mapper层)

在com.pjb.mapper包中,创建UserMapper接口(用户信息Mapper动态代理接口)。

  1. package com.pjb.mapper;
  2. import com.pjb.entity.UserInfo;
  3. import com.pjb.entity.UserSearchParam;
  4. import org.apache.ibatis.annotations.Mapper;
  5. import org.apache.ibatis.annotations.SelectProvider;
  6. import org.apache.ibatis.jdbc.SQL;
  7. import org.springframework.stereotype.Repository;
  8. import java.util.List;
  9. /**
  10. * 用户信息Mapper动态代理接口
  11. * @author pan_junbiao
  12. **/
  13. @Mapper
  14. @Repository
  15. public interface UserMapper
  16. {
  17. /**
  18. * 查询用户列表
  19. */
  20. @SelectProvider(type = UserSqlBuilder.class, method = "searchUserList")
  21. public List<UserInfo> searchUserList(UserSearchParam param);
  22. //建议将SQL Builder以映射器接口内部类的形式进行定义
  23. public class UserSqlBuilder
  24. {
  25. public String searchUserList(UserSearchParam param)
  26. {
  27. return new SQL()
  28. {
  29. {
  30. SELECT("*");
  31. FROM("tb_user");
  32. WHERE("1 = 1");
  33. if(param!=null)
  34. {
  35. //用户姓名
  36. if(param.getUserName()!=null && param.getUserName().length()>0)
  37. {
  38. WHERE("user_name like '%${userName}%'");
  39. }
  40. //省份
  41. if(param.getProvince()!=null && param.getProvince().length()>0)
  42. {
  43. WHERE("province = #{province}");
  44. }
  45. }
  46. }
  47. }.toString();
  48. }
  49. }
  50. }

3、运行测试

【运行】查询第2页的用户数据,每页10条数据,并根据创建时间排序。

  1. @Autowired
  2. private UserMapper userMapper;
  3. /**
  4. * 分页查询用户列表
  5. * @author pan_junbiao
  6. */
  7. @Test
  8. public void searchUserByParam()
  9. {
  10. int pageIndex = 2; ///获取第2页的数据
  11. int pageSize = 10; //每页10条数据
  12. String orderBy = "create_time ASC"; //排序
  13. //分页信息
  14. PageHelper.startPage(pageIndex, pageSize, orderBy);
  15. //查询条件类
  16. UserSearchParam userSearchParam = new UserSearchParam();
  17. //userSearchParam.setUserName("pan_junbiao的博客"); //查询条件1
  18. //userSearchParam.setProvince("广东省"); //查询条件2
  19. //执行分页查询
  20. PageInfo<UserInfo> userInfoPage = new PageInfo<UserInfo>(userMapper.searchUserList(userSearchParam));
  21. //打印用户列表
  22. System.out.println("\n");
  23. List<UserInfo> userInfoList = userInfoPage.getList();
  24. userInfoList.stream().forEach(System.out::println);
  25. //打印分页信息
  26. System.out.println("当前页码:第" + userInfoPage.getPageNum() + "页");
  27. System.out.println("分页大小:每页" + userInfoPage.getPageSize() + "条");
  28. System.out.println("数据总数:共" + userInfoPage.getTotal() + "条");
  29. System.out.println("总页数:共" + userInfoPage.getPages() + "页");
  30. }

PageInfo类提供的相关属性如下:

执行结果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/88322
推荐阅读
相关标签
  

闽ICP备14008679号