MyBatis使用PageHelper实现分页查询

x33g5p2x  于2021-09-23 转载在 其他  
字(5.8k)|赞(0)|评价(0)|浏览(279)

1、创建数据表

-- 判断数据表是否存在,存在则删除
DROP TABLE IF EXISTS tb_teacher;
 
-- 创建“用户信息”数据表
CREATE TABLE IF NOT EXISTS tb_teacher( 
	id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
	name VARCHAR(50) NOT NULL COMMENT '用户姓名',
	province VARCHAR(50) NOT NULL COMMENT '省份',
	create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间'
) COMMENT = '用户信息表';
 
-- 添加数据
INSERT INTO tb_teacher(name,province) VALUES
('拒绝熬夜啊的博客_01','广东省'),('拒绝熬夜啊的博客_02','黑龙江省'),('拒绝熬夜啊的博客_03','山东省'),('拒绝熬夜啊的博客_04','安徽省'),('拒绝熬夜啊的博客_05','黑龙江省'),
('拒绝熬夜啊的博客_06','江苏省'),('拒绝熬夜啊的博客_07','黑龙江省'),('拒绝熬夜啊的博客_08','广东省'),('拒绝熬夜啊的博客_09','陕西省'),('拒绝熬夜啊的博客_10','广东省'),
('拒绝熬夜啊的博客_11','广东省'),('拒绝熬夜啊的博客_12','江苏省'),('拒绝熬夜啊的博客_13','陕西省'),('拒绝熬夜啊的博客_14','安徽省'),('拒绝熬夜啊的博客_15','山东省'),
('拒绝熬夜啊的博客_16','陕西省'),('拒绝熬夜啊的博客_17','安徽省'),('拒绝熬夜啊的博客_18','江苏省'),('拒绝熬夜啊的博客_19','黑龙江省'),('拒绝熬夜啊的博客_20','安徽省'),
('拒绝熬夜啊的博客_21','江苏省'),('拒绝熬夜啊的博客_22','广东省'),('拒绝熬夜啊的博客_23','安徽省'),('拒绝熬夜啊的博客_24','陕西省'),('拒绝熬夜啊的博客_25','广东省'),
('拒绝熬夜啊的博客_26','广东省'),('拒绝熬夜啊的博客_27','安徽省'),('拒绝熬夜啊的博客_28','山东省'),('拒绝熬夜啊的博客_29','山东省'),('拒绝熬夜啊的博客_30','黑龙江省'),
('拒绝熬夜啊的博客_31','广东省'),('拒绝熬夜啊的博客_32','江苏省'),('拒绝熬夜啊的博客_33','陕西省'),('拒绝熬夜啊的博客_34','安徽省'),('拒绝熬夜啊的博客_35','山东省');

2、创建项目

2.1 添加pom.xml配置信息

<!-- SpringBoot/MyBatis使用PageHelper分页控件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.13</version>
        </dependency>

        <!-- MySQL的JDBC数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

2.2配置相关信息

spring:
  #DataSource数据源
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis_test?useSSL=false&amp
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

#MyBatis配置
mybatis:
  type-aliases-package: com.mye.hl09mybatispagehelper.api.pojo #别名定义
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定 MyBatis 所用日志的具体实现,未指定时将自动查找
    map-underscore-to-camel-case: true #开启自动驼峰命名规则(camel case)映射
    lazy-loading-enabled: true #开启延时加载开关
    aggressive-lazy-loading: false #将积极加载改为消极加载(即按需加载),默认值就是false
    lazy-load-trigger-methods: "" #阻挡不相干的操作触发,实现懒加载
    cache-enabled: true #打开全局缓存开关(二级环境),默认值就是true

#MyBatis使用pageHelper分页
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true

配置说明:

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

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

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

2.3创建实体类

package com.mye.hl09mybatispagehelper.api.pojo;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.Date;
 

@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserInfo {
    private int id; //用户编号
    private String name; //用户姓名
    private String province; //省份
    private Date createTime; //注册时间
}

2.4创建查询条件类

package com.mye.hl09mybatispagehelper.api.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserSearchParam {
    private String name; //用户姓名
    private String province; //省份
}

2.5数据库映射层(Mapper层)

package com.mye.hl09mybatispagehelper.api.mapper;

import com.mye.hl09mybatispagehelper.api.pojo.UserInfo;
import com.mye.hl09mybatispagehelper.api.pojo.UserSearchParam;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.jdbc.SQL;
import org.springframework.stereotype.Repository;
 
import java.util.List;

@Mapper
@Repository
public interface UserMapper {
    /** * 查询用户列表 */
    @SelectProvider(type = UserSqlBuilder.class, method = "searchUserList")
    public List<UserInfo> searchUserList(UserSearchParam param);
 
    //建议将SQL Builder以映射器接口内部类的形式进行定义
    public class UserSqlBuilder {
        public String searchUserList(UserSearchParam param) {
            return new SQL() {
                {
                    SELECT("*");
                    FROM("tb_teacher");
                    WHERE("1 = 1");
                    if(param!=null) {
                        //用户姓名
                        if(param.getName()!=null && param.getName().length()>0) {
                            WHERE("user_name like '%${userName}%'");
                        }
 
                        //省份
                        if(param.getProvince()!=null && param.getProvince().length()>0) {
                            WHERE("province = #{province}");
                        }
                    }
                }
            }.toString();
        }
    }
}

3、运行测试

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

package com.mye.hl09mybatispagehelper;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mye.hl09mybatispagehelper.api.mapper.UserMapper;
import com.mye.hl09mybatispagehelper.api.pojo.UserInfo;
import com.mye.hl09mybatispagehelper.api.pojo.UserSearchParam;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@SpringBootTest(classes = Hl09MybatisPagehelperApplication.class)
@RunWith(SpringRunner.class)
public class Hl09MybatisPagehelperApplicationTests {

    @Autowired
    private UserMapper userMapper;

    /** * 分页查询用户列表 * @author pan_junbiao */
    @Test
    public void searchUserByParam() {
        int pageIndex = 2; ///获取第2页的数据
        int pageSize = 10; //每页10条数据
        String orderBy = "create_time ASC"; //排序

        //分页信息
        PageHelper.startPage(pageIndex, pageSize, orderBy);

        //查询条件类
        UserSearchParam userSearchParam = new UserSearchParam();

        //执行分页查询
        List<UserInfo> userInfos = userMapper.searchUserList(userSearchParam);
        PageInfo<UserInfo> userInfoPage = new PageInfo<UserInfo>(userInfos);

        //打印用户列表
        System.out.println("\n");
        List<UserInfo> userInfoList = userInfoPage.getList();
        userInfoList.stream().forEach(System.out::println);

        //打印分页信息
        System.out.println("当前页码:第" + userInfoPage.getPageNum() + "页");
        System.out.println("分页大小:每页" + userInfoPage.getPageSize() + "条");
        System.out.println("数据总数:共" + userInfoPage.getTotal() + "条");
        System.out.println("总页数:共" + userInfoPage.getPages() + "页");
    }

}

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

执行结果

相关文章