当前位置: 首页 > news >正文

基于SpringBoot的SSMP整合案例(开启日志与分页查询条件查询功能实现)

开启事务

导入Mybatis-Plus框架后,我们可以使用Mybatis-Plus自带的事务,只需要在配置文件中配置即可
使用配置方式开启日志,设置日志输出方式为标准输出
mybatis-plus:global-config:db-config:table-prefix: tb_id-type: autoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
只有最后一行有用

数据层开发-分页功能

分页操作需要设定分页对象IPage,Page第一个参数当前页码值,第二个是每一页中条数
@Testvoid testPage(){IPage page = new Page(2,2);bookDao.selectPage(page,null);System.out.println(page.getRecords());}
IPage对象中封装了分页操作中的所有数据数据当前页码值每页数据总量最大页码值数据总量

这样就直接实现分页了吗?
答案是否定的

分页操作是在MyBatisPlus的常规操作基础上增强得到,内部是动态的拼写SQL语句,
因此需要增强对应的功能,使用MyBatisPlus拦截器实现
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mybatisPlusInterceptor;}
}
执行测试代码
@Testvoid testPage(){IPage page = new Page(1,2);bookDao.selectPage(page,null);System.out.println(page.getRecords());}

在这里插入图片描述
可以看出执行了两次查询,第一次执行的查询获取了总条数,为下面的分页做准备

数据层开发-条件查询功能

上面的分页查询中 bookDao.selectPage(page,null);
第二个参数赋成null,你可能好奇它的功能是什么,那里是用来放条件对象QueryWrapper的。

QueryWrapper解析
QueryWrapper 是 MyBatis-Plus 的一个核心功能,它是用来构造 SQL 查询语句的。MyBatis-Plus 是一款 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
QueryWrapper 主要提供了以下几个功能:
链式调用: QueryWrapper 支持链式调用,使得代码更加简洁易读。
条件构造器: QueryWrapper 提供了丰富的条件构造方法,如 eq (等于)、ne (不等于)、gt (大于)、ge (大于等于)、lt (小于)、le (小于等于) 等。
SQL函数支持: QueryWrapper 支持 SQL 函数,比如 count、sum、avg 等。
子查询支持: QueryWrapper 支持子查询,可以在查询条件中嵌套子查询。
排序支持: QueryWrapper 支持 orderBy 方法进行排序。

下面是一个事例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三").ne("age", 20).like("email", "test").orderByAsc("age");
等价于SQL语句
SELECT * FROM user WHERE name = '张三' AND age != 20 AND email LIKE '%test%' ORDER BY age ASC;
了解完基础知识点,下面是实际使用
@Testvoid testGetBy(){QueryWrapper<Book> queryWrapper = new QueryWrapper<>();queryWrapper.like("name","Spring");List list = bookDao.selectList(queryWrapper);}
执行结果

在这里插入图片描述

缺点:有的时候我们可能会打错,比如将name打成了nmae,有没有什么可以解决呢?有LambdaQueryWrapper。

LambdaQueryWrapper 是 MyBatis-Plus 提供的一个查询条件构造器,它是 QueryWrapper 的一个变种,主要使用 Java 8 的 Lambda 表达式语法。
LambdaQueryWrapper 提供了与 QueryWrapper 类似的功能,包括链式调用、条件构造器、SQL函数支持、子查询支持、排序支持等。
相比于 QueryWrapper,LambdaQueryWrapper 的主要优点在于:
类型安全:LambdaQueryWrapper 使用了 Java 8 的 Lambda 表达式,使得其具有类型安全的特性。你可以在编译时检查到类型错误,而 QueryWrapper 在编译时无法检查到类型错误,只能在运行时通过抛出异常来发现错误。
代码可读性更强:由于使用了 Lambda 表达式,LambdaQueryWrapper 的代码可读性更强。你可以直接看到正在操作的是哪个字段,而不需要通过字符串来指定字段名,这样也避免了因为字段名拼写错误导致的问题。

例如,我们可以使用 LambdaQueryWrapper 构造如下的查询语句:
LambdaQueryWrapper<User> lambdaQuery = new QueryWrapper<User>().lambda();
lambdaQuery.eq(User::getName, "张三").ne(User::getAge, 20).like(User::getEmail, "test").orderByAsc(User::getAge);
等价于SQL语句
SELECT * FROM user WHERE name = '张三' AND age != 20 AND email LIKE '%test%' ORDER BY age ASC;
User::getName 表示字段名是 "name",其他的类推,这样我们就不会因为因为不小心而出错了。
实战如下
@Testvoid testGetBy2(){LambdaQueryWrapper<Book> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.like(Book::getName,"Spring");List list = bookDao.selectList(queryWrapper);}
执行结果如下

在这里插入图片描述

仅学习记录,如有错误欢迎指正~

相关文章:

基于SpringBoot的SSMP整合案例(开启日志与分页查询条件查询功能实现)

开启事务 导入Mybatis-Plus框架后&#xff0c;我们可以使用Mybatis-Plus自带的事务&#xff0c;只需要在配置文件中配置即可 使用配置方式开启日志&#xff0c;设置日志输出方式为标准输出mybatis-plus:global-config:db-config:table-prefix: tb_id-type: autoconfiguration:…...

android studio 修改图标

Android Studio 修改图标 简介 Android Studio 是一款由谷歌推出的用于开发 Android 应用程序的集成开发环境&#xff08;IDE&#xff09;。在开发过程中&#xff0c;我们可以根据自己的需求修改 Android Studio 的图标&#xff0c;以个性化我们的开发环境。 本文将介绍如何在…...

pytorch学习之第二课之预测温度

主要有以下几个步骤 第一&#xff1a;导入相应的工具包 第二&#xff1a;导入需要使用的数据集 第三&#xff1a;对导入的数据集输入进行预处理&#xff0c;找出特征与标签&#xff0c;查看数据特征的类型&#xff0c;判断是否需要标准化或者归一化处理 第四&#xff1a;构建神…...

基于Mahony互补滤波的IMU数据优化_学习笔记整理

这周自己被安排进行优化软件 IMU 姿态解算项目&#xff0c;之前自己只简单了解四元数&#xff0c;对IMU数据处理从未接触&#xff0c;通过这一周的学习感觉收获颇丰&#xff0c;在今天光棍节之际&#xff0c;&#xff0c;&#xff0c;用大半天的时间对这一周的收获进行整理&…...

c语言实现哈夫曼编码

要实现哈夫曼编码&#xff0c;需要以下步骤&#xff1a; 统计字符出现的频率构建哈夫曼树遍历哈夫曼树&#xff0c;给不同的字符赋予不同的编码将编码后的字符写入文件中 下面是一个简单的 C 语言实现&#xff1a; #include <stdio.h> #include <stdlib.h> #inc…...

Vuex:模块化Module :VCA模式

VCA中不支持辅助函数&#xff0c;因为辅助函数中是用this.$store&#xff0c;而VCA中没有绑定this的 由于使用单一状态树&#xff0c;应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时&#xff0c;store 对象就有可能变得相当臃肿。 这句话的意思是&#xff0c;…...

【uni-app + uView】CountryCodePicker 国家区号组件

1. 效果图 2. 组件完整代码 <template><u-popup class="country-code-picker-container" v-if="show" :show...

思科对路由器的配置

②对路由器R2进行配置 对路由器R2进行配置&#xff0c;先对各接口配置基本IP地址&#xff0c;然后配置动态路由协议。&#xff08;对实验步骤进行文字描述&#xff09; Router>enable //用户模式进入特权…...

实战Leetcode(三)

Practice makes perfect&#xff01; 实战一&#xff1a; 带环问题其实我们小学时就接触过&#xff0c;就比如在操场上比赛跑步的追击问题&#xff0c;这里也是一样&#xff0c;如果我们定义两个指针&#xff0c;一个快指针&#xff0c;一个慢指针&#xff0c;快指针走的快&…...

【PTE-day05 宽字节注入】

1、函数 过滤输入的函数: addslashes mysql_real_escape_string mysql_escape_string当字符的大小为一个字节时,称之为窄字节 例如ascii编码 当字符的大小为两个字节时,称之为宽字节 例如GB2312、GBK、GB8030 mysql使用GBK编码时,默认的会认为两个字符为一个汉字,前一个字…...

计算机网络期末复习-Part3

1、rdt1.0&#xff0c;rdt2.0&#xff0c;rdt3.0的底层信道模型 RDT 1.0: 完全可靠的底层信道&#xff0c;没有比特差错&#xff0c;也没有分组丢失。 RDT 2.0: 具有比特差错的底层信道&#xff0c;有比特差错&#xff0c;但没有分组丢失。 RDT 3.0: 具有差错和丢包的底层信道…...

docker在虚拟机中的应用

文章目录 Docker的基础概念与入门docker与docker镜像的理解虚拟机下[ubantu系统下]Docker的安装Docker-engine 的常用命令Docker 的 Example配置Docker的国内源虚拟机安装Postgresql的Docker物理机访问Postgresql数据库利用Docker-engine容器化前端项目工程1. 编写项目电器2. 构…...

小程序样式淡入淡出效果

小程序切换下一个文章或者页面&#xff0c;淡入淡出效果 // detail.js getArticleData: function(articleId) {// 开始淡出效果this.animate(.detail-page, [{ opacity: 1.0, ease: ease-out },{ opacity: 0.0, ease: ease-out }], 500, () > {// 在淡出动画完成后请求文章…...

虚幻5 删除C盘缓存及修改缓存路径

一.修改C盘缓存 C盘缓存路径为&#xff1a; C:\Users\xx(这里是你的用户名)\AppData\Local\UnrealEngine\Common\DerivedDataCache 注意&#xff0c;如果没有AppData文件夹&#xff0c;请依次点击查看-勾选显示隐藏的项目&#xff0c;即可 可删除里面的所有文件即可 二.修改…...

手写C++ 实现链表的反转、删除、合并

目录 一、手写List成员方法 1.1 打印链表 1.2 删除链表节点 1.3 链表中倒数第k个节点 1.4 反转链表 1.5 合并两个排序链表 二、完整代码 一、C实现链表成员方法 在上一篇博客《手写链表C》&#xff0c;实现了基本的List类。在面试中&#xff0c;经常被问到List如何反转、…...

虚幻C++基础 day4

虚幻中的UI 虚幻中的比较常用的UI&#xff1a;Widget Blueprint又称UMG虚幻中的两种布局&#xff1a; 网格布局锚布局 创建Widget Blueprint 网格布局 有点类似Qt中的网格布局&#xff0c;将UI面板进行行列切分Horizontal Box&#xff1a;水平分布Vertical Box&#xff1a;…...

【Vue】【uni-app】工单管理页面实现

用的是uni-app的uni-ui拓展组件实现的 功能是对工单进行一个展示&#xff0c;并对工单根据一些筛选条件进行搜索 目前是实现了除了日期之外的搜索功能&#xff0c;测试数据是下面这个tableData.js&#xff0c;都是我自己手写的&#xff0c;后端请求也稍微写了一些&#xff0c;…...

【系统架构设计】架构核心知识: 2.1 软件过程模型

目录 一 软件过程模型 1 瀑布模型 2 V模型 3 喷泉模型 4 增量模型 5 原型模型...

数据管理系统-week1-文件系统、数据库和数据库管理系统

文章目录 前言一、 文件系统文件系统的限制 二、 数据库系统三、 数据库管理系统参考文献 前言 一、 文件系统 对于更高级的数据处理应用程序来说&#xff0c;基于数据块的持久存储逻辑模型过于简单数据块序列被划分为称为文件的数据块的可变子序列&#xff0c;与文件相关的名…...

探索OpenCV中直方图的神奇之处:应用与实现

文章目录 导言&#xff1a;直方图概述&#xff1a;函数原型参数说明&#xff1a;代码示例 应用场景&#xff1a;结语&#xff1a; 导言&#xff1a; 直方图是数字图像处理中一个强大而重要的工具&#xff0c;它通过可视化数据的分布情况&#xff0c;帮助我们更好地理解图像的特…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】

1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...