SpringBoot+Mybatis实现分页查询[通俗易懂]

SpringBoot+Mybatis实现分页查询[通俗易懂]文章目录前言1.引入依赖2.Mapper中接口3.修改XML文件4.controller层调用接口5.测试总结前言分页查询是在web开发中常用的一种技术,当某个页面查询返回的数据量较大时,为了提高性能和用户体验不能将所有数据一次性返回给过前端,这时候就需要用到分页查询了PageHelper是一款开源的Mybatis第三方物理分页插件,springboot项目中集成PageHelper插件非…

大家好,又见面了,我是你们的朋友全栈君。

前言

分页查询是在web开发中常用的一种技术,当某个页面查询返回的数据量较大时,为了提高性能和用户体验不能将所有数据一次性返回给过前端,这时候就需要用到分页查询了

PageHelper是一款开源的Mybatis第三方物理分页插件,spring boot项目中集成PageHelper插件非常简单,下面将为大家详细介绍;

插件地址:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

1.引入依赖

在上一篇文章Mybatis 实现基本的增删改查 (基于Mybatis-generator插件方式)的基础上,在pom.xml中添加如下依赖:

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

2.Mapper中接口

在EmployeeMapper.java中新增findByPaging接口,接口返回类型为Page

public interface EmployeeMapper { 
   
    int deleteByPrimaryKey(Long id);

    int insert(Employee record);

    int insertSelective(Employee record);

    Employee selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(Employee record);

    int updateByPrimaryKey(Employee record);

    Page<Employee> findByPaging(Map param);
}

3.修改XML文件

在EmployeeMapper.xml中添加上面接口对应Sql查询语句,可以看到使用插件的方式查询时,这里入参的类型为com.github.pagehelper.Page

  <select id="findByPaging" resultMap="BaseResultMap" parameterType="map">
    select
    *
    from employee
    where 1=1
    <if test="age != null">
      and age = #{age}
    </if>
  </select>

4.controller层调用接口

EmployeeController.java中新增findBypaging方法

   @ApiOperation(value = "分页查询")
    @GetMapping("findBypaging")
    public ResultMsg findByPaging(Integer age,Integer pageNum, Integer pageSize){ 
   
        PageHelper.startPage(pageNum,pageSize);
        Map param = new HashMap();
        param.put("age",age);
        Page<Employee> data = employeeMapper.findByPaging(param);
        JSONObject result = new JSONObject();
        result.put("employees",data);
        result.put("pages",data.getPages());
        result.put("total",data.getTotal());
        return ResultMsg.getMsg(result);
    }

ps:这里分页查询参数的传递方式和普通的查询是一样的,map的方式添加就可以了

5.测试

编写一个测试用例,向数据库中批量插入200个员工数据

@RunWith(SpringRunner.class)
@SpringBootTest
public class HrefApplicationTests { 
   
    @Autowired
    private EmployeeMapper employeeMapper;
    @Autowired
    private IdWorker idWorker;
    public static String getRandomStr(int length) { 
   
        String base = "abcdefghijklmnopqrstuvwxyz0123456789";
        int randomNum;
        char randomChar;
        Random random = new Random();
        // StringBuffer类型的可以append增加字符
        StringBuffer str = new StringBuffer();
        for (int i = 0; i < length; i++) { 
   
            // 可生成[0,n)之间的整数,获得随机位置
            randomNum = random.nextInt(base.length());
            // 获得随机位置对应的字符
            randomChar = base.charAt(randomNum);
            // 组成一个随机字符串
            str.append(randomChar);
        }
        return str.toString();
    }
    Employee createRadomEmployee()
    { 
   
        Employee employee = new Employee();
        employee.setAddress("北新街" + getRandomStr(5));
        employee.setAge("22");
        employee.setGender(new Short("1"));
        employee.setCreateTime(new Date());
        employee.setName(getRandomStr(10));
        employee.setId(idWorker.nextId());
        return employee;
    }
    @Test
    public void insertEmployees() { 
   
        for(int i=0;i<402;i++)
        { 
   
            employeeMapper.insert(createRadomEmployee());
        }
    }
}

执行后,看到测试数据已经建好

SpringBoot+Mybatis实现分页查询[通俗易懂]

打开swagger,输入pageNum和pageSize,点击Try it out

SpringBoot+Mybatis实现分页查询[通俗易懂]

返回结果如下:可以看到总数据为402,总页数为134,一共返回了3条数据

{ 
   
  "data": { 
   
    "total": "402",
    "pages": 134,
    "employees": [
      { 
   
        "address": "北新街4wf91",
        "age": "22",
        "createTime": 1558951333000,
        "deptId": 0,
        "gender": 0,
        "id": "317724116919799808",
        "name": "69wcpvii46"
      },
      { 
   
        "address": "北新街8voe8",
        "age": "22",
        "createTime": 1558951333000,
        "deptId": 0,
        "gender": 0,
        "id": "317724117007880192",
        "name": "9sicl9xer4"
      },
      { 
   
        "address": "北新街tbq90",
        "age": "22",
        "createTime": 1558951333000,
        "deptId": 0,
        "gender": 0,
        "id": "317724117309870080",
        "name": "u9zxm84sqo"
      }
    ]
  },
  "result": "SUCCESS",
  "resultCode": 200,
  "resultMsg": ""
}

总结

可以看到在spring boot中使用pageHealper插件进行分页查询很简单,包括如下3步:

  1. 导入插件依赖或jar包
  2. 在Mapper中添加接口,返回类型为Page<实体类型>,本例为Page
  3. 在xml中添加查询语句,入参的类型为com.github.pagehelper.Page

项目源码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137207.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • AD域介绍

    AD域介绍域的背景介绍为什么要使用域?假设你是公司的系统管理员,你们公司有一千台电脑。如果你要为每台电脑设置登录帐户,设置权限(比如是否允许登录帐户安装软件),那你要分别坐在这一千台电脑前工作。如果你要做一些改变,你也要分别在这一千台电脑上修改。相信没有哪个管理员想要用这种不吃不喝不睡觉的方式来工作,所以就应运而生了域的概念。域(Domain):概念域模型就是针对大型网络的管理需求而设计的,域就是共享用户账号,计算机账号和安全策略的计算机集合。域的管理优点因为所有的用户信息都被集中存储,所以,域提供了集

    2022年5月17日
    106
  • PLD,CPLD,FPGA区别[通俗易懂]

    PLD,CPLD,FPGA区别[通俗易懂]入门以后可以学习Xilinx的ISE,Altera的QuartusII学习CPLD初学者,建议选用LATTICE,这家公司在此方面有优势主流还是Altera和Xilinx,毕竟是最大的两家PLD公司(Cyclone   Spartan) PLD,CPLD,FPGA有何不同?不同厂家的叫法不尽相同,  PLD(ProgrammableLogicDevice)是可编程逻辑器件的总称

    2022年5月4日
    95
  • Docker(三):镜像导入与导出、保存与加载、在Docker容器中安装软件

    Docker(三):镜像导入与导出、保存与加载、在Docker容器中安装软件

    2021年9月26日
    312
  • 故障恢复控制台_win7故障恢复控制台怎么进入

    故障恢复控制台_win7故障恢复控制台怎么进入一、恢复控制台是何许人也?开机F8进入安全模式,杀毒….相信不管是菜鸟还是老鸟都小Kiss了,然而有一天我们发现不能进入安全模式了,选择DOS启动,但是大多数的不支持NTFS,还是PE盘我想你

    2022年8月5日
    10
  • ajax请求的五个步骤java_ajax请求的五个步骤

    ajax请求的五个步骤java_ajax请求的五个步骤ajax请求的五个步骤第一步,创建XMLHttpRequest对象第二步,注册回调函数第三步,配置请求信息,open(),get第四步,发送请求,post请求下,要传递的参数放这第五步,创建回调函数//第一步,创建XMLHttpRequest对象varxmlHttp=newXMLHttpRequest();functionCommentAll(){//第二步,注册回调函数xmlHttp…

    2022年5月17日
    58
  • C语言文件打开方式简介

    C语言文件打开方式简介1、“r”以只读方式打开一个文件;2、“w”以只写方式打开一个文件;3、“a”打开一个文件追加;4、“rb”以只读方式打开一个二进制文件;5、“rw”以只写方式打开一个二进制文件;6、“ra”打开一个二进制文件追加;7、”r+”以读写方式打开一个文件;8、“w+”以读写方式建立一个文件;9、“a+”以读写方式打开一个文件追加;10、“rb+”以读写方式打开一个二

    2022年7月13日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号