企业级真实应用利用Mybatis-Plus进行分页查询处理

news2024/11/27 23:57:22

怎么导入依赖我在之前的文章里边有说过不理解的可以看看

你应该懂点Mybatis-plus,真的好用

1:了解Page<T>类的使用 

首先我们需要使用到Page类 ,建立一个Page类,泛式类型中放入我们需要输出的类,是列表的话就放入列表。

MyBatis Plus 是 MyBatis 的增强包装库,MyBatis 是一种流行的 Java 应用程序持久性框架。MyBatis Plus 提供了额外的特性和实用程序来简化数据访问层代码的开发。

在MyBatis Plus中,该类Page<T>是用于分页的通用类。它代表一个数据页面,并提供检索有关当前页面的信息以及执行与分页相关的操作的方法。

Page<T>下面是MyBatis Plus 中类的一些常用方法和属性:

  1. getCurrent():返回当前页码。
  2. getSize():返回每页的记录数。
  3. getRecords():返回当前页面的记录列表。
  4. getTotal():返回所有页面的记录总数。
  5. getPages():返回总页数。
  6. hasNext():true如果有下一页则返回,false否则返回。
  7. hasPrevious()true如果有上一页则返回,false否则返回。
  8. next():移至下一页并返回一个新Page<T>对象。
  9. previous():移至上一页并返回一个新Page<T>对象。
  10. convert(Function<? super T, ? extends U> mapper):使用提供的映射函数转换当前页面上的记录。
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;


public IPage<User> getUsersByPage(int pageNumber, int pageSize) {
   
    Page<User> page = new Page<>(pageNumber, pageSize);


    IPage<User> userPage = userMapper.selectPage(page, null);

    List<User> userList = userPage.getRecords();
    long total = userPage.getTotal();
    int currentPage = userPage.getCurrent();
    int pageSize = userPage.getSize();
    int totalPages = userPage.getPages();
    boolean hasNext = userPage.hasNext();
    boolean hasPrevious = userPage.hasPrevious();

    return userPage;
}

2.了解BaseMapper<T>


BaseMapper<T>MyBatis Plus 提供的一个接口,作为对T实体进行 CRUD 操作的基础映射器。它包括用于基本数据库操作(例如插入、更新、删除和查询记录)的常用方法。

以下是该接口提供的一些常用方法BaseMapper<User>

  • int insert(T entity): 将新记录插入到指定实体的数据库中。
  • int insertBatch(List<T> entityList):将指定实体列表的多条记录插入数据库。
  • int updateById(T entity):使用主键更新指定实体在数据库中的记录。
  • int deleteById(Serializable id):根据主键从数据库中删除记录。
  • T selectById(Serializable id):根据主键从数据库中检索单个记录。
  • List<T> selectBatchIds(Collection<? extends Serializable> idList):根据主键值列表从数据库中检索多条记录。
  • List<T> selectByMap(Map<String, Object> columnMap):根据列名和值的映射从数据库中检索记录。
  • IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper):执行分页查询并返回一页结果。

BaseMapper<User>接口提供这些方法作为默认实现,这意味着您可以直接使用它们,而无需编写任何额外的代码。但是,如果需要修改它们的行为,您也可以在自定义映射器接口中重写这些方法。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    
    // Custom query methods
    
    User selectById(Long id);
    
    List<User> selectByUsername(String username);
    
    List<User> selectByAgeRange(@Param("minAge") int minAge, @Param("maxAge") int maxAge);
    
    // Custom update method
    
    int updateUsernameById(@Param("id") Long id, @Param("username") String username);
    
    // Custom delete method
    
    int deleteByUsername(String username);
    
}

通过扩展BaseMapper<T>,您的自定义映射器接口(例如 )UserMapper继承了这些方法,并且可以另外定义特定于User实体或应用程序要求的自定义方法。

使用BaseMapper<User>作为映射器的基本接口提供了一种在实体上执行基本 CRUD 操作的便捷方法,User而无需显式编写 SQL 查询。MyBatis Plus根据方法调用和注释生成SQL语句,使数据库操作更简单、更高效。

3:Mybatis-Plus使用PageHelper分页插件

第一步:引包

<!--SpringBoot框架必须引入此依赖-->
 <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
 </dependency


<!--需要网页展示的需要加上这个依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>



<!--为什么不直接使用mybatis直接的依赖,需要是使用springboot那一套依赖呢,因为需要进行springboot跟mybatis适配所以不用下边的这个依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
        </dependency>

第二步:配置文件

使用mybatis下的PageHelper插件,不是只引入依赖就可以了。还需要在配置文件里边进行一系列的配置。

1:启动项配置文件

mybatis-plus:
  mapper-locations: classpath*:sql/**/*Mapper.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  database:
    pageHelper:
      helperDialect: mysql
      reasonable: true
      supportMethousArguments: true
      params: count=countSql




  
mybatis:
  mapper-locations: classpath*:sql/**/*Mapper.xml
  configuration:
    database-id: ${mybatis.database.provider.type:mysql}
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  database:
    pageHelper:
      helperDialect: mysql
      reasonable: true
      supportMethousArguments: true
      params: count=countSql

数据逻辑里边使用的是mybatis-plus就是用它的配置,使用mybatis就使用mybatis的配置。

第三步:使用

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

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

相关文章

(C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。

要求&#xff1a;原始数组的数据从键盘随机输入&#xff0c;新数组以4行4列的方式输出。 #include<stdio.h> int main() {int matrix[4][4],matrix2[4][4];int count;for(int i 0;i < 4;i )for(int j 0;j < 4;j )scanf("%d",&matrix[i][j]);for(i…

HarmonyOS元服务实现今天吃什么

一、前言 作为一个职业打工人&#xff0c;每天点外卖吃啥东西都有选择综合症&#xff0c;突发奇想让程序帮我们随机选择一个吃的&#xff0c;是不是可以解决我们的选择问题呢&#xff0c;说干就干&#xff0c;我们就使用HarmonyOS元服务实现一下这个功能。为什么选择这个Harmon…

Open X-Embodiment 超大规模开源真实机器人数据集分享

近期&#xff0c;Google旗下的前沿人工智能企业DeepMind汇集了来自 22 种不同机器人类型的数据&#xff0c;创建了 Open X-Embodiment 数据集并开源了出来。该数据集让他们研发的RT-2 机器人在制造和编程方式上有了重大飞跃。 有分析称&#xff0c;在上述数据集上训练的 RT-2-…

每天一点python——day67

#每天一点Python——67 #字符串判断方法&#xff1a;如图&#xff1a; #①判断指定字符串是否为合法标识符 shello,computer print(s.isidentifier()) #输出为False&#xff0c;不是合法标识符&#xff0c;这是因为标识符是由字母&#xff0c;数字&#xff0c;下划线组成&#…

工业数据的“最后一公里”怎么走?

随着工业互联网的迅猛发展&#xff0c;工业数据已经成为推动制造业转型升级的重要动力。然而&#xff0c;面对海量的工业数据&#xff0c;如何高效、准确地走过数据的“最后一公里”&#xff0c;成为制约企业发展的关键问题。本文将探讨工业数据“最后一公里”所面临的挑战&…

15.“百钱百鸡“问题

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码1程序运行代码优化程序运行代码优化进阶 前言 本系列为结构循环编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 二、题目分析 三、解题 程序运行代码1 #include <stdio.h> int main…

ARPG----C++学习记录05 Section10 武器类,IK重定向,装备和捡起武器,动画蓝图

代码更新 11.13 BAOfanTing/ARPG_Game_Code7ab54d2 GitHub 武器类 基于item类&#xff0c;创建一个weapon的C类&#xff0c;基于它创建一个蓝图&#xff0c;刀剑的网格体给它。在蓝图里调动之前在C写好的sin函数添加到世界偏移量里&#xff0c;得到一把悬浮刀 在item把重叠函…

Win10系统把D盘空间分给C盘的方法

在Win10系统中&#xff0c;用户发现C盘的空间太少了&#xff0c;导致电脑运作出现了卡顿的问题&#xff0c;所以想把D盘的空间分给C盘&#xff0c;但不清楚具体的操作步骤。接下来小编给大家介绍两种简单的操作方法&#xff0c;帮助大家轻松将Win10系统D盘的空间分给C盘&#x…

​Unity Vuforia 新手(图片识别)教程,后续整理 实体识别 详细流程

文章目录 前言一、Vuforia是什么&#xff1f;二、Unity导入Vuforia1.去Unity - Windows – Asset Store&#xff0c;搜vuforia engine&#xff0c;添加到我的资源2.打开package Manager&#xff0c;导入到工程中即可3.或者在vuforia engine官网下载的Unity包导入4.检查是否导入…

mysql数据库时间

记录MySQL今天又一个新的问题&#xff1a; 场景&#xff1a;nodejs后台容器部署 问题原因&#xff1a;纯属好心办坏事&#xff0c;由于考虑了时区&#xff08;现在看来纯属多余&#xff09;&#xff0c;在写入时间时使用了time_str.toLocaleString("chinese", { ti…

android studio开发flutter应用,使用mumu模拟器调试软件

安装好mumu模拟器&#xff0c;先打开网易mumu模拟器的开发者模拟。系统应用 > 设置 > 关于手机 > 版本号 多点击几次调出开发者模式&#xff1a; 然后在android studio中刷新设备列表&#xff0c;就能看到新设备了&#xff1a; 如何确定这个设备就是你的mumu模拟器呢…

Cesium:绘制点

作者&#xff1a;CSDN _乐多_ 本文记录了在Cesium中绘制点的函数。 文章目录 data() 里面设置点的样式 pointOption: {show: true,pixelSize: 10,heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,color: Cesium.Color.RED,outlineColor: Cesium.Color.YELLOW,outl…

视频封装格式

FLV&#xff08;Flash Video&#xff09; FLV封装格式 Tag Data分为Audio&#xff0c;Video&#xff0c;Script三种 TS&#xff08;Transport Stream&#xff09;传输流 TS文件分为三层&#xff0c;&#xff08;倒叙更好理解&#xff09; TS层&#xff1a;在PES层基础上加入…

java 旋转方阵

public static void main(String[] args) {Scanner scanner new Scanner(System.in);// N阶方阵int n scanner.nextInt();// 构建方阵List<List<Integer>> matrix new ArrayList<>();for (int i 0; i < n; i) {List<Integer> row new ArrayLis…

RUST与Python对比分析

1 什么是Rust&#xff1f; Rust 是一种系统编程语言&#xff0c;注重安全性&#xff0c;尤其是并发安全性&#xff0c;支持函数式、命令式和泛型编程范式等多范式语言。Rust 在语法上与 C 类似&#xff0c;但设计者希望在保持性能的同时提供更好的内存安全性。Rust 最初是由 Mo…

集团VPN问题排查及核心交换机(思科C9500)路由编写

前言 昨天发现子公司A无法访问子公司B的服务器。已知之前是可以的。经过tracert及ping的简单排查。发现&#xff0c;A没有经过飞塔200F的防火墙出去。 已知集团使用两套防火墙。思科2110以及飞塔200F。并且在上方都做了VPN的配置。200F承接SD-WAN。 我们知道&#xff0c;当A公…

详述使用CubeMX配置STM32RCC时钟

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言一…

帮助中心干货 | 4步即可快速搭建高效帮助中心

任何一个产品有用户涌入使用之后&#xff0c;都会不可避免地面临一个场景问题&#xff1a;如何及时、高效、便捷地解决用户使用过程中的问题&#xff1f; 在使用某些网站的功能或服务时&#xff0c;用户常常会遇到一些看似简单但没有说明依然可能难以理解的问题。如果问题没有…

linux查看端口占用情况

lsof命令 lsof(list open files)命令可以列出当前系统中打开的所有文件&#xff0c;包括网络端口。可以使用lsof命令查看某个端口被哪个进程占用。 具体的命令为&#xff1a;sudo lsof -i :端口号&#xff0c;其中端口号为需要查询的端口号。 netstat命令 使用netstat命令&a…

Vatee万腾的数字化掌舵:Vatee科技引领未来的新高度

随着数字化时代的到来&#xff0c;Vatee万腾以其卓越的科技决策力成为引领潮流的掌舵者。 Vatee万腾通过对科技前沿的不懈探索&#xff0c;站在了数字化创新的最前沿。其领先的科技团队致力于发掘并应用最新的数字技术&#xff0c;为用户提供卓越的数字化体验。 Vatee万腾以其…