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

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

你应该懂点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的配置。

第三步:使用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享5款好用到爆的神仙软件

​ 最近陆陆续续收到好多小伙伴的咨询&#xff0c;这边也是抓紧时间整理出几个好用的软件&#xff0c;希望可以帮到大家。 1.全局鼠标手势——MouseInc ​ MouseInc是一款由shuax制作的全局鼠标手势软件&#xff0c;还支持很多增强辅助功能&#xff0c;如屏幕取色、窗口管理、…

前端学习笔记--Event-loop

定义 Event Loop&#xff1a;即事件循环&#xff0c;是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制&#xff0c;也就是我们经常使用异步的原理。 **进程&#xff1a;**进程是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分…

vmware安装MacOS以及flutter遇到的问题

安装过程&#xff1a;参考下面的文章 链接&#xff1a; 虚拟机VMware安装苹果系统macOS&#xff0c;超级详细教程&#xff0c;附文件下载&#xff0c;真教程&#xff01;&#xff01; 无限重启情况&#xff1a; &#xff08;二&#xff09; 配置虚拟机找到你的虚拟机安装文件…

查询站点真实IP地址,绕过CDN

一.如何判断站点是否使用了CDN&#xff1f; 使用其他省市的电脑进行ping看返回的IP地址是否相同通过第三方网站查询 站长工具 3.nslookup命令 二. 如何绕过CDN获取真实IP 子域名查询&#xff0c;因为很多站点只对主域名进行了CDN加速网站邮件头信息微步在线DNS查询

[PyTorch][chapter 63][强化学习-QLearning]

前言&#xff1a; 这里结合走迷宫的例子,重点学习一下QLearning迭代更新算法 0,1,2,3,4 是房间&#xff0c;之间绿色的是代表可以走过去。 5为出口 可以用下图表示 目录&#xff1a; 策略评估 策略改进 迭代算法 走迷宫实现Python 一 策略评估 强化学习最终是为了…

算法通关村——数组中第K大的数字

数组中第K大的数字 1、题目描述 ​ LeetCode215. 数组中的第K个最大元素。给定整数数组nums和整数k&#xff0c;请返回数组中第k个最大的元素。请注意&#xff0c;你需要找的是数组排序后的第k个最大的元素&#xff0c;而不是第k个不同的元素。 示例1&#xff1a; 输入&#…

LLM prompt提示工程调试方法经验技巧汇总

现在接到一个LLM模型任务&#xff0c;第一反应就是能不能通过精调prompt来实现&#xff0c;因为使用prompt不需要训练模型&#xff0c;只需输入指令就可以实现和LLM的交互。按照以往经验&#xff0c;不同的prompt对模型输出影响非常大&#xff0c;如果能构造一个好的prompt&…

【23真题】厉害,这套竟有150分满分!

今天分享的是23年中国海洋大学946的信号与系统试题及解析。 本套试卷难度分析&#xff1a;22年中国海洋大学946考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取!平均分为109-120分&#xff0c;最高分为150分满分&#xff01;本套试题内容难度中等&…

【vue】 实现 自定义 Calendar 日历

图例&#xff1a;自定义日历 一、标签自定义处理 <div class"date-box"><el-calendar v-model"state.currDate" ref"calendar"><template #header"{ date }"><div class"date-head flex"><div …

Golang获取月份的第一天和最后一天

package mainimport ("fmt""strconv""strings""time" )func main() {month : "2023-11"result : GetMonthStartAndEnd(month)fmt.Println(result["start"] " - " result["end"]) }// 获取月…

图形化探索:快速改造单实例为双主、MGR、读写分离等架

单机GreatSQL/MySQL调整架构为多副本复制的好处有哪些&#xff1f;为什么要调整&#xff1f; 性能优化&#xff1a;如果单个GreatSQL服务器的处理能力达到瓶颈&#xff0c;可能需要通过主从复制、双主复制或MGR&#xff0c;以及其他高可用方案等来提高整体性能。通过将读请求分…

zabbix的服务器端 server端安装部署

zabbix的服务器端 server 主机iplocalhost&#xff08;centos 7&#xff09;192.168.10.128 zabbix官网部署教程 但是不全&#xff0c;建议搭配这篇文章一起看 zabbixAgent部署 安装mysql 所有配置信息和Zabbix收集到的数据都被存储在数据库中。 下载对应的yum源 yum ins…

【Linux】非堵塞轮询

堵塞轮询&#xff1a; 堵塞轮询是我们最简单的一种等待方式也是最常应用的等待方式。 但是&#xff0c;一旦阻塞等待也就意味着我们当前在进行等待的时候&#xff0c;父进程什么都干不了。 非堵塞轮询&#xff1a; 其中非阻塞等待&#xff0c;是等待的一种模式&#xff0c; 在…

如何使用Imagewheel+内网穿透搭建私人图床实现公网访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

【淘宝API】商品详情+搜索商品列表接口

淘宝商品详情API接口可以使用淘宝开放平台提供的SDK或API来获取。这些接口可以用于获取商品的详细信息&#xff0c;如标题、价格、描述、图片等。 以下是使用淘宝开放平台API获取商品详情的步骤&#xff1a; 注册淘宝开放平台账号&#xff0c;并创建应用&#xff0c;获取应用…

Sentinel 流控规则

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…

下一代VPN工具:体验TailScale的简便和高效

目录 一、概要VPN 是什么&#xff1f;TailScale 是什么 二、使用1、注册2、下载安装3、 Windows4、Linux5、 Android6、测试 三、Nginx整合Tailscale做端口转发 一、概要 VPN 是什么&#xff1f; 看到 VPN 第一反应应该是翻墙&#xff0c;但 VPN 最初应该也是最普遍的用途应该…

重生奇迹mu圣导师加点

重生奇迹mu圣导师加点&#xff1a;要攻击高可以加力量&#xff0c;平衡系建议加点力量600~800&#xff0c;智力200~400&#xff0c;敏够装备要求&#xff0c;统帅1000&#xff0c;其余加体力。 圣导师靠加力量培养高攻圣导师不现实&#xff0c;建议玩家练魔&#xff0c;低级圣…

win10关闭讲述人、粘滞键功能的快捷键启动

简单记录下在win10关闭讲述人、粘滞键快速启动的快捷键&#xff0c;这两个功能对正常人没什么用。误触发很烦。 禁用讲述人 按windows键&#xff0c;输入“轻松使用设置”&#xff0c;点“讲述人”&#xff0c;如下图取消讲述人开关和快捷键的勾选。 禁用粘滞键 按windows…

算法笔记-散列

算法笔记-散列 hash算法的思想整数出现的个数字符串出现个数整数是否出现整数出现的个数2字符是否出现字符串出现的个数2-sum-hash字符串出现的次数集合求交集合求并集合求差hash算法的思想 散列方法的主要思想是根据结点的关键码值来确定其存储地址 以关键码值K为自变量,通过…