Mybatis分页查询案例

前言

今天再写项目时刚好碰到Mybatis分页查询展示数据,现将实现过程整理出来以便后续再碰到类似需求回来瞅一眼。

数据准备

1、数据库表(user_info)

在这里插入图片描述

在这里插入图片描述

2、前端页面

在这里插入图片描述

代码实现

1、User实体类

package com.liming.pojo;import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.ToString;
import java.util.Date;/*** user_info表的实体类:*/
@Data
@ToString
public class User {private int userId;//用户idprivate String userCode;//账号private String userName;//用户名private String userPwd;//用户密码private String userType;//用户类型private String userState;//用户状态private String isDelete;//删除状态private int createBy;//创建人//返回前端时,自动将Date转换成指定格式的json字符串@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")private Date createTime;//创建时间private int updateBy;//修改人private Date updateTime;//修改时间// 自定义属性,数据库没有该字段private String getCode;public User() {}public User(int userId, String userCode, String userName, String userPwd,String userType, String userState, String isDelete, int createBy,Date createTime, int updateBy, Date updateTime) {this.userId = userId;this.userCode = userCode;this.userName = userName;this.userPwd = userPwd;this.userType = userType;this.userState = userState;this.isDelete = isDelete;this.createBy = createBy;this.createTime = createTime;this.updateBy = updateBy;this.updateTime = updateTime;}
}

page实体类

package com.liming.page;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;import java.util.List;/*** 分页信息实体类** @author 黎明* @version 1.0* @date 2023/8/7 16:02*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Page {//当前页码private Integer pageNum;//每页显示行数private Integer pageSize;//总行数private Integer totalNum;//总页数private Integer pageCount;//limit函数参数一每页起始行(起始索引)private Integer limitIndex;//存储当前页查询到的数据的List<?>集合private List<?> resultList;//计算总页数public Integer getPageCount() {return totalNum % pageSize == 0 ? totalNum / pageSize : totalNum / pageSize + 1;}//计算limit函数参数一每页起始行public Integer getLimitIndex() {return pageSize * (pageNum - 1);}
}

2、UserMapper

package com.liming.mapper;import com.liming.page.Page;
import com.liming.pojo.User;
import org.apache.ibatis.annotations.Param;import java.util.List;/*** user_info mapper接口** @author 黎明* @version 1.0* @date 2023/7/23 21:04*/
public interface UserMapper {/*** 查询用户总行数的方法** @param user 分页的选择条件* @return 总记录数*/public Integer selectUserCount(User user);/*** 分页查询用户的方法** @param page 分页对象* @param user 分页的选择条件* @return 当前页用户信息*/public List<User> selectUserPage(@Param("page") Page page,@Param("user") User user);
}

3、UserMapper映射文件

<!--查询用户总行数的方法-->
<select id="selectUserCount" resultType="integer">select count(*)from user_info<where><if test="userCode != null and userCode != ''">and user_code like "%"#{userCode}"%"</if><if test="userType != null and userType != ''">and user_type = #{userType}</if><if test="userState != null and userState != ''">and user_state = #{userState}</if>and is_delete = 0</where></select><!--分页查询用户的方法--><select id="selectUserPage" resultType="user">select t1.*,t2.user_code as getCodefrom user_info t1,user_info t2<where>and t1.create_by = t2.user_id<if test="user.userCode != null and user.userCode != ''">and  t1.user_code like "%"#{userCode}"%"</if><if test="user.userType != null and user.userType != ''">and t1.user_type = #{user.userType}</if><if test="user.userState != null and user.userState != ''">and t1.user_state = #{user.userState}</if>and t1.is_delete = 0</where>limit #{page.limitIndex},#{page.pageSize}</select>

4、UserService

package com.liming.service;import com.liming.page.Page;
import com.liming.pojo.User;/*** user_info的service接口* @author 黎明* @date 2023/8/7 17:06* @version 1.0*/
public interface UserService {// 分页查询用户的业务方法public abstract Page queryUserPage(Page page,User user);
}

5、UserServiceImpl

/*** 分页查询用户的业务方法** @param page page对象* @param user 条件* @return page对象*/
@Override
public Page queryUserPage(Page page, User user) {// 查询用户总行数Integer userCount = userMapper.selectUserCount(user);// 分页查询用户List<User> users = userMapper.selectUserPage(page, user);//将查询到的总行数和当前页数据组装到Page对象page.setPageCount(userCount);page.setResultList(users);return page;
}

6、UserController

package com.liming.controller;import com.liming.page.Page;
import com.liming.pojo.Result;
import com.liming.pojo.User;
import com.liming.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author 黎明* @version 1.0* @date 2023/8/7 16:16*/
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;/*** 分页查询用户的url接口/user/user-list** 参数Page对象用于接收请求参数页码pageNum、每页行数pageSize;* 参数User对象用于接收请求参数用户名userCode、用户类型userType、用户状态userState;** 返回值Result对象向客户端响应组装了所有分页信息的Page对象;*/@RequestMapping("/user-list")public Result userListPage(Page page, User user){//执行业务page = userService.queryUserPage(page, user);//响应return Result.ok(page);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

帆软设计器报表加载不出折线图的原因

最近在用帆软设计器做可视化图表。偶有遇到因为数据集的字段类型导致加载不出折线&#xff0c;现记录如下。做报表的同行可以参考。 数据库使用了 Oracle 11g。数据集的 SQL 代码片是之前用在另一个单元格报表里面的。页面上有一个率是直接计算得出&#xff0c;我为了方便、就…

python+requests+json 接口测试思路示例

实际项目中用python脚本实现接口测试的步骤&#xff1a; 1 发送请求&#xff0c;获取响应 》》2 提取响应里的数据&#xff0c;对数据进行必要的处理 》》3 断言响应数据是否与预期一致 以豆瓣接口为例&#xff0c;做一个简单的接口测试吧。使用到的知识涉及requests库&…

Mermaid系列之FlowChart流程图

一.欢迎来到我的酒馆 介绍mermaid下&#xff0c;Flowchat流程图语法。 目录 一.欢迎来到我的酒馆二.什么是mermiad工具三.在vs code中使用mermaid四.基本语法 二.什么是mermiad工具 2.1 mermaid可以让你使用代码来创建图表和可视化效果。mermaid是一款基于javascript语言的图表…

小研究 - MySQL 分区分表的设计及实(一)

随着信息技术的快速发展&#xff0c;数据量越来越大&#xff0c;海量的表查询操作需要消耗大量的时间&#xff0c;成为影响数据库访问性能提高的主要因素。为了提升数据库操作的查询效率和用户体验&#xff0c;在关系型数据库管理系统(MySQL)中通过 range 分区和 Merge 存储&am…

百模大战,谁是赢家?文心3.5稳坐国内第一,综合评分超ChatGPT!

近日&#xff0c;清华大学新闻与传播学院沈阳团队发布《大语言模型综合性能评估报告》&#xff08;下文简称“报告”&#xff09;&#xff0c;报告显示百度文心一言在三大维度20项指标中综合评分国内第一&#xff0c;超越ChatGPT&#xff0c;其中中文语义理解排名第一&#xff…

在收到满意的大厂offer之前,面试也是至关重要的,那么该如何做好IT类的面试呢?

方向一&#xff1a;分享你面试IT公司的小技巧 沉着冷静应对刁难&#xff1a;应试场上&#xff0c;考官往往会针对求职者的薄弱点提出一些带有挑战性的问题。面对这样的考题&#xff0c;你一定要心平气和&#xff0c;较为委婉地加以反驳和申诉&#xff0c;绝不可情绪激动&#x…

通用Mapper的四个常见注解

四个常见注解 1、Table 作用&#xff1a;建立实体类和数据库表之间的对应关系。 默认规则&#xff1a;实体类类名首字母小写作为表名&#xff0c;如 Employee -> employee 表 用法&#xff1a;在 Table 注解的 name 属性中指定目标数据库的表名&#xff1b; 案例&#…

uC-OS2 V2.93 STM32L476 移植:串口打印篇

前言 前几篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG 的 STM32L476RG 的 裸机工程&#xff0c;下载了 uC-OS2 V2.93 的源码&#xff0c;并把 uC-OS2 的源文件加入 Keil MDK5 工程&#xff0c;通过适配 Systick 系统定时器与 PendSV 实现任务调度&#xff0c;初步让 uC-OS2 …

GSS3 - Can you answer these queries III

GSS3 - Can you answer these queries III 题面翻译 n n n 个数&#xff0c; q q q 次操作 操作0 x y把 A x A_x Ax​ 修改为 y y y 操作1 l r询问区间 [ l , r ] [l, r] [l,r] 的最大子段和 感谢 Edgration 提供的翻译 题目描述 You are given a sequence A of N (N <…

laravel语言包问题

1、更新vendor composer require "overtrue/laravel-lang:3.0" 2、修正配置文件 config/app.php 3、 php artisan config:clear 更新缓存 4、设定新的语言包 在这个resources\lang目录下加即可

dubbo之基础知识

Dubbo 官网地址&#xff1a;Apache Dubbo Dubbo 是一款易用、高性能的 WEB 和 RPC 框架&#xff0c;同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践 作用 1.远程方法调用 2.容错和负载均衡 3.提供服务的自动注册与发现 为什么需要…

MyBatis 查询数据库之二(增、删、改、查操作)

目录 1. 配置打印 MyBatis 执行的SQL 2. 查询操作 2.1 通过用户 ID 查询用户信息、查询所有用户信息 (1) Mapper 接口 (2)UserMapper.xml 查询所有用户的具体实现 SQL (3)进行单元测试 3. 增加操作 3.1 在 mapper&#xff08;interface&#xff09;里面添加增加方法的声…

YOLOv5项目调试与实战

拥有青春的时候 你就要感受它 不要浪费你的黄金时代 把宝贵的内在生命活出来 什么都别错过 一、项目介绍与环境配置 github地址 选择5.0版本的tag&#xff0c;并下载源码 使用Pycharm打开代码 选择解释器&#xff0c;我选择的是之前conda创建的pytorch环境 安装项目所需要用到…

go-zero超强工具goctl的常用命令api,rpc,model及其构建的服务解析

goctl api 详情移步&#xff1a; go-zero的路由机制解析 基于go-zero的api服务刨析并对比与gin的区别 goctl rpc goctl支持多种rpc&#xff0c;较为流行的是google开源的grpc&#xff0c;这里主要介绍goctl rpc protoc的代码生成与使用。 protoc是grpc的命令&#xff0c;作用…

Flowise AI:用于构建LLM流的拖放UI

推荐&#xff1a;使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是Flowise AI&#xff1f; Flowise AI是一个开源的UI可视化工具&#xff0c;用于帮助开发LangChain应用程序。在我们详细介绍 Flowise AI 之前&#xff0c;让我们快速定义 LangChain。LangChain是…

powershell几句话设置环境变量

设置环境变量比较繁琐&#xff0c;现在用这段话&#xff0c;在powershell中就可以轻松完成。 $existingPath [Environment]::GetEnvironmentVariable("Path", "Machine") $newPath "C:\Your\Path\Here"if ($existingPath -split ";"…

MySQL(1)

MySQL创建数据库和创建数据表 创建数据库 1. 连接 MySQL mysql -u root -p 2. 查看当前的数据库 show databases; 3. 创建数据库 create database 数据库名; 创建数据库 4. 创建数据库时设置字符编码 create database 数据库名 character set utf8; 5. 查看和显示…

Doris(四)-Rollup 使用

1&#xff0c;基本语法 1.1 新增 alter table user_landing_record_newadd rollup succ_login_count_index(user_id,day_succ_login_count); 1.2删除 alter table user_landing_record_newdrop rollup succ_login_count_index; 1.3其他操作&#xff0c;参考官网 传送门 …

【新】通达OA前台反序列化漏洞分析

0x01 前言 注&#xff1a;本文仅以安全研究为目的&#xff0c;分享对该漏洞的挖掘过程&#xff0c;文中涉及的所有漏洞均已报送给国家单位&#xff0c;请勿用做非法用途。 通达OA作为历史上出现漏洞较多的OA&#xff0c;在经过多轮的迭代之后已经很少前台的RCE漏洞了。一般来说…

RabbitMQ的安装

RabbitMQ的安装 1、Windows环境下的RabbitMQ安装步骤 使用的版本&#xff1a;otp_win64_23.2 rabbitmq-server-3.8.16 版本说明&#xff1a;https://www.rabbitmq.com/which-erlang.html#compatibility-matrix 1.1 下载并安装erlang RabbitMQ 服务端代码是使用并发式语言…