SpringBoot分页实现查询数据

news2024/11/25 13:42:24

1.原生查询

1.1创建分页查询实体类

package com.itheima.pojo;

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

import java.util.List;

//分页查询结果封装类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
    private Long total; //总记录数
    private List rows;  //数据列表
}

1.2编写控制类

package com.itheima.controller;

import com.itheima.pojo.PageBean;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;

/**
 * 员工管理Controller
 */
//开启日志
@Slf4j
@RestController
public class EmpController {
    @Autowired
    private EmpService empService;

    @GetMapping("/emps")
//    能够拿到前端传递过来的参数
    public Result page(@RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize,
                       String name, Short gender,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
//        设置默认值
//        if(page==null) page=1;
//        if(pageSize==null) pageSize=10;
        log.info("分页查询参数,参数:{},{},{},{}", page, pageSize, name, gender, begin, end);
        PageBean pageBean = empService.page(page, pageSize);
//        ,name, gender, begin, end
        return Result.success(pageBean);
    }
}

1.3接口

package com.itheima.service;

import com.itheima.pojo.PageBean;

/**
 * 员工管理
 */
public interface EmpService {
    //    分页查询
    PageBean page(Integer page, Integer pageSize);
//    , String name, Short gender, LocalDate begin, LocalDate end
}

1.4实现接口类

package com.itheima.service.impl;

import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

        @Override
    public PageBean page(Integer page, Integer pageSize) {
//        获取总记录数
        Long count = empMapper.count();
//        分页查询结果列表
//        起始索引计算
        Integer startIndex = (page - 1) * pageSize;
        List<Emp> empList = empMapper.page(startIndex, pageSize);
//        封装PageBean对象
        PageBean pageBean = new PageBean(count, empList);

        return pageBean;
    }
//    @Override
//    public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
    1.设置分页参数
//        PageHelper.startPage(page, pageSize);
    2.执行查询
//        List<Emp> empList = empMapper.list(name, gender, begin, end);
        将empList强转为Page类型
        Page<Emp>是一个分页对象,包含了总记录数和分页后的查询结果。
//        Page<Emp> p=(Page<Emp>) empList;
        封装PageBean对象
//        PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
//
//        return pageBean;
//    }
}

1.5 mapper接口类

package com.itheima.mapper;

import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 员工管理
 */
@Mapper
public interface EmpMapper {
//    查询总记录数
    @Select("select count(*) from emp")
    public Long count();
//分页查询获取列表数据
    @Select("select * from emp limit #{start},#{pageSize}")
    public List<Emp> page(Integer start,Integer pageSize);
//    员工信息查询
//    @Select("select * from emp")
//    public List<Emp> list();
//    String name, Short gender, LocalDate begin, LocalDate end
}

 1.6数据库结构

1.7测试接口

1.8 application.properties

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=123456

#配置mybatis的日志, 指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#开启mybatis的驼峰命名自动映射开关 a_column ------> aCloumn
mybatis.configuration.map-underscore-to-camel-case=true

2.PageHelper

说明:分页插件提示效率。按条件查询

2.1配置依赖

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

2.2 创建分页查询实体类

package com.itheima.pojo;

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

import java.util.List;

//分页查询结果封装类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
    private Long total; //总记录数
    private List rows;  //数据列表
}

2.3编写控制类

package com.itheima.controller;

import com.itheima.pojo.PageBean;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;

/**
 * 员工管理Controller
 */
//开启日志
@Slf4j
@RestController
public class EmpController {
    @Autowired
    private EmpService empService;

    @GetMapping("/emps")
//    能够拿到前端传递过来的参数
    public Result page(@RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize,
                       String name, Short gender,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                       @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
//        设置默认值
//        if(page==null) page=1;
//        if(pageSize==null) pageSize=10;
        log.info("分页查询参数,参数:{},{},{},{}", page, pageSize, name, gender, begin, end);
        PageBean pageBean = empService.page(page, pageSize,name, gender, begin, end);
//       
        return Result.success(pageBean);
    }
}

 2.4接口

package com.itheima.service;

import com.itheima.pojo.PageBean;

import java.time.LocalDate;

/**
 * 员工管理
 */
public interface EmpService {
    //    分页查询
    PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end);
//
}

2.5实现接口类

package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.List;

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;

//        @Override
//    public PageBean page(Integer page, Integer pageSize) {
        获取总记录数
//        Long count = empMapper.count();
        分页查询结果列表
        起始索引计算
//        Integer startIndex = (page - 1) * pageSize;
//        List<Emp> empList = empMapper.page(startIndex, pageSize);
        封装PageBean对象
//        PageBean pageBean = new PageBean(count, empList);
//
//        return pageBean;
//    }
    @Override
    public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
//
//    1.设置分页参数
        PageHelper.startPage(page, pageSize);
//    2.执行查询
        List<Emp> empList = empMapper.list(name, gender, begin, end);
//
//        将empList强转为Page类型
//        Page<Emp>是一个分页对象,包含了总记录数和分页后的查询结果。
        Page<Emp> p=(Page<Emp>) empList;
//        封装PageBean对象
        PageBean pageBean = new PageBean(p.getTotal(), p.getResult());

        return pageBean;
    }
}

2.6mapper接口类

package com.itheima.mapper;

import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDate;
import java.util.List;

/**
 * 员工管理
 */
@Mapper
public interface EmpMapper {
//    查询总记录数
//    @Select("select count(*) from emp")
//    public Long count();
//分页查询获取列表数据
//    @Select("select * from emp limit #{start},#{pageSize}")
//    public List<Emp> page(Integer start,Integer pageSize);
//    员工信息查询
    @Select("select * from emp")
    public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
//
}

2.7测试接口

2.8项目结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为项目管理的43210法则

【微|信|公|众|号&#xff1a;厦门微思网络】

Pytorch实现的LSTM、RNN模型结构

一、LSTM模型 import torch from torch import nn import torchvision.datasets as dsets import torchvision.transforms as transforms import matplotlib.pyplot as plttorch.manual_seed(1)# Hyper Parameters EPOCH 1 # 训练整批数据多少次, 为了节约时间, 我们…

PCA9306——I2C电平转换模块

PCA930——I2C电平转换 PCA9306是双向I2C总线和SMBus电压电平转换器&#xff0c;具有启用&#xff08;EN&#xff09;输入&#xff0c;可从1.0 V到3.6 V和1.8 V到5.5V的电平转换。 PCA9306允许在1.0 V和5V之间的双向电压转换&#xff0c;而不使用方向引脚。开关的低接通状态电…

自监督学习模型发展综述:Inst Disc、Inva Sread、MOCO、SimCLR、BYOL

文章目录 一、Inst Disc研究意义价值个体判别&#xff08;instance discrimination&#xff09;特点实现方法如何训练CNN大量负样本如何存储前向传播过程Proximal Regularization超参数设置 二、Inva Sread特点原理如何选取正负样本前向传播过程目标函数模型效果不够好的原因 M…

JDK jps命令复习

之前写过jdk命令工具的博文&#xff0c;下面复习jps命令&#xff1b; jps 是 Java Process Status Tool 的简称,它的作用是为了列出所有正在运行中的 Java 虚拟机进程和相关信息&#xff1b; jps 命令参数 -q 只输出进程 ID,省略主类的名称 -m 输出虚拟机进程启动时传递…

【PyTorch攻略(2/7)】 加载数据集

一、说明 PyTorch提供了两个数据原语&#xff1a;torch.utils.data.DataLoader和torch.utils.data.Dataset&#xff0c;允许您使用预加载的数据集以及您自己的数据。数据集存储样本及其相应的标签&#xff0c;DataLoader 围绕数据集包装一个可迭代对象&#xff0c;以便轻松访问…

大模型助力企业数据驱动,火山引擎数智平台发布AI助手

9月19日&#xff0c;火山引擎在其举办的“V-Tech数据驱动科技峰会”上宣布&#xff0c;火山引擎数智平台VeDI推出“AI助手”&#xff0c;通过接入人工智能大模型&#xff0c;帮助企业提升数据处理和查询分析的效率。即使是不会写代码的运营人员&#xff0c;和大模型对话也能做好…

Vue3封装知识点(三)依赖注入:project和inject详细介绍

Vue3封装知识点&#xff08;三&#xff09;依赖注入&#xff1a;project和inject详细介绍 文章目录 Vue3封装知识点&#xff08;三&#xff09;依赖注入&#xff1a;project和inject详细介绍一、project和inject是什么二、为了解决什么问题三、project和inject如何使用1.provid…

四川百幕晟科技:抖店精选联盟怎么使用?

近年来&#xff0c;电商平台的兴起让很多人纷纷加入进来&#xff0c;希望通过在网上销售产品来赚取更多的利润。在这个竞争激烈的市场中&#xff0c;如何找到稳定的渠道来推广自己的产品成为了每个卖家的追求。抖店精选联盟是一个不错的选择&#xff0c;可以帮助卖家快速提升销…

数字调度与智能填报:提升效率的新时代

数字化和智能化正深刻改变着各行各业&#xff0c;包括调度和填报领域。传统的手工操作正在被数字调度和智能填报技术所取代&#xff0c;它们正在改变各行各业的工作方式&#xff0c;带来巨大的效率提升和智能化管理。 了解数字调度与智能填报 数字调度&#xff1a;优化资源利用…

C/C++大写字母的判断 2023年5月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C大写字母的判断 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C大写字母的判断 2023年5月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个字符&#xff0c;判…

原生小程序生命周期,路由跳转,本地存储等详解

原生小程序生命周期&#xff0c;路由跳转&#xff0c;本地存储等详解 生命周期&#xff0c;路由跳转&#xff0c;本地存储等API详解 原生小程序&#xff08;Native Mini Program&#xff09;是一种在微信小程序平台上开发的小程序类型&#xff0c;与传统的小程序开发方式&#…

合并两个升序链表,合并后也是升序的

开始时也要判断是否有一个链表本来就是空&#xff0c;如果是&#xff0c;直接返回另外一个链表 代码&#xff1a; struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){if(list1NULL){return list2;}if(list2NULL){return list1;} struct ListN…

VB Function过程求最大公约数和最小公倍数

VB Function过程求最大公约数和最小公倍数 Function过程求最大公约数和最小公倍数 Private Function gys(ByVal m%, ByVal n%) As IntegerDim r As IntegerDo 辗转相除法r m Mod nIf r 0 Then Exit Dom nn rLoopgys n End Function Private Sub Command1_Click()Dim a%, …

【EI会议信息】第五届土木建筑与城市工程国际学术会议(ICCAUE 2023)

第五届土木建筑与城市工程国际学术会议&#xff08;ICCAUE 2023&#xff09; 2023 5th International Conference on Civil Architecture and Urban Engineering (ICCAUE 2023) 第五届土木建筑与城市工程国际学术会议&#xff08;ICCAUE 2023&#xff09;由天津大学主办&…

听GPT 讲Istio源代码--pilot(5)

File: istio/pilot/pkg/serviceregistry/kube/controller/ambientindex.go ambientindex.go文件位于istio/pilot/pkg/serviceregistry/kube/controller目录中。它是Istio中Kubernetes服务注册表控制器的一部分&#xff0c;负责维护工作负载和服务之间的索引&#xff0c;以便快速…

「聊设计模式」之外观模式(Facade)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 设计模式是一种通用的解决问题的方式&#xff0c;它不仅仅…

MySQL常见面试题(二)

&#x1f600;前言 在数据库管理和操作中&#xff0c;我们常常需要深入理解其各种数据类型、特性和索引类型来优化我们的数据库设计和查询效率。其中&#xff0c;字符串类型和它们如何在MySQL中实现和使用成为了一个必不可少的知识点。同时&#xff0c;我们也需要理解新的特性&…

基于Java的高校实习管理系统设计与实现(亮点:实习记录、实习打分、实习作业,功能新颖、老师没见过、当场唬住!)

高校实习管理系统 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统主要功能5.1…

若依cloud -【 100 ~ 】

100 分布式日志介绍 | RuoYi 分布式日志就相当于把日志存储在不同的设备上面。比如若依项目中有ruoyi-modules-file、ruoyi-modules-gen、ruoyi-modules-job、ruoyi-modules-system四个应用&#xff0c;每个应用都部署在单独的一台机器里边&#xff0c;应用对应的日志的也单独存…