MyBatis与MyBatis-Plus的分页以及转换
一、介绍
MyBatis和MyBatis-Plus都是Java持久化框架,用于简化数据库访问和操作。它们提供了面向对象的方式来管理关系型数据库中的数据。
MyBatis是一个轻量级的持久化框架,通过XML或注解配置,将SQL语句与Java对象进行映射,使开发者可以使用简单的API来执行数据库操作。MyBatis支持动态SQL、缓存、批处理等功能,并与多种数据库兼容。
MyBatis-Plus是在MyBatis的基础上构建的增强版框架。它提供了更多的便利功能和增强特性,使开发者能够更加高效地进行数据库访问。MyBatis-Plus内置了常见的CRUD操作方法,还提供了代码生成器、分页插件、逻辑删除、多租户支持等功能,大大简化了开发流程。
总结而言,MyBatis是一个成熟且灵活的持久化框架,而MyBatis-Plus则是在此基础上进行了扩展和增强,提供了更多的便利功能和工具。选择使用哪个框架取决于项目需求和个人偏好。
二、MyBatis与MyBatis-Plus区别
1、MyBatis:
特点:
MyBatis是一款持久层框架,它通过XML或注解配置SQL映射关系,将数据库操作与Java对象的映射分离。它提供了灵活的SQL编写方式,支持动态SQL和批量操作等功能。
优点:
1、灵活性高:MyBatis通过XML或注解配置SQL语句,可以满足各种复杂的SQL需求,包括动态SQL、复杂查询等。
2、性能好:MyBatis可以手动优化SQL语句,保证数据库访问的效率。
3、易于集成:MyBatis可以与各种第三方框架(如Spring)无缝集成,使用起来比较方便。
缺点:
1、编写工作量大:相对于其他ORM框架,MyBatis需要手动编写SQL语句,会增加一定的开发工作量。
2、学习成本较高:MyBatis需要掌握SQL语句的编写和框架的配置,对于初学者来说,学习曲线较陡峭。
2、MyBatis-Plus
特点:
MyBatis-Plus是在MyBatis基础上进行封装的增强工具,提供了更便捷的CRUD操作和一些常用功能的封装。
优点:
1、简化开发:MyBatis-Plus提供了一系列的CRUD操作方法和查询构造器,可以极大地简化开发过程,减少重复代码的编写。
2、更加易用:MyBatis-Plus提供了一些常用功能的封装,如分页查询、逻辑删除等,开发人员可以更轻松地使用这些功能,提高开发效率。
3、自动生成CRUD方法:MyBatis-Plus支持根据数据库表自动生成对应的实体类和Mapper接口,大大减少了手动编写CRUD方法的工作量。
缺点:
1、对于复杂SQL的支持较弱:相比于MyBatis,MyBatis-Plus在处理一些复杂的SQL语句时,可能会有一定的限制。
区别:
主要区别如下:
1、MyBatis需要手动传递offset
和limit
参数,而MyBatis-Plus使用Page
对象来封装分页信息。
2、MyBatis-Plus提供了更简单的API,如selectPage()
,可以自动计算总记录数并返回分页结果。
3、MyBatis-Plus还提供了更多高级的分页查询功能,如排序、自定义SQL等。
选择使用哪种方式取决于个人偏好和项目需求。如果你希望更简洁、方便的方式实现分页查询,可以考虑使用MyBatis-Plus。
三、MyBatis分页
在MyBatis中,分页查询需要使用两个参数:offset
(偏移量)和limit
(限制数量),它们用于控制查询结果的起始位置和返回的记录数。下面是一个使用MyBatis进行分页查询的示例:
@Mapper
public interface UserMapper {List<User> getUsers(@Param("offset") int offset, @Param("limit") int limit);
}
然后,在XML映射文件中,使用${}
占位符来引用这两个参数:
<select id="getUsers" resultType="User">SELECT * FROM usersLIMIT #{offset}, #{limit}
</select>
通过传递正确的offset
和limit
值,可以实现分页查询。
四、MyBatis-Plus分页
相比之下,MyBatis-Plus提供了更简单的分页查询方式。它引入了一个Page
对象,该对象封装了与分页相关的信息,如当前页码、每页记录数等。下面是使用MyBatis-Plus进行分页查询的示例:
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic Page<User> getUsers(int pageNo, int pageSize) {Page<User> page = new Page<>(pageNo, pageSize);return userMapper.selectPage(page, null);}
}
在这个例子中,Page<User>
对象用于封装分页信息,并且通过userMapper.selectPage()
方法进行查询。
需要注意的是,MyBatis-Plus还提供了更多高级的分页查询功能,例如自动计算总记录数、排序等。
五、MyBatis向MyBatis-Plus转换
步骤 1:添加相关依赖
首先,在项目的构建文件中(如Maven的pom.xml或Gradle的build.gradle)添加MyBatis-Plus的依赖。根据你的具体需求和项目环境,可以在这里找到相应的依赖:MyBatis-Plus官方文档
步骤 2:修改Mapper接口
在Mapper接口中,使用com.baomidou.mybatisplus.core.mapper.BaseMapper
作为父接口,该接口包含了MyBatis-Plus提供的CRUD方法以及分页查询方法。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface YourMapper extends BaseMapper<YourEntity> {
}
步骤 3:配置分页插件
在MyBatis的配置文件中(通常是mybatis-config.xml
),添加MyBatis-Plus的分页插件配置。这个插件会自动拦截原本的分页查询语句并实现分页功能。
<configuration><!-- 其他配置 --><plugins><plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"><property name="dialectType" value="mysql"/> <!-- 数据库类型 --></plugin></plugins>
</configuration>
步骤 4:修改分页查询方法
在原先的分页查询方法中,将PageHelper.startPage()
替换为MyBatis-Plus提供的com.baomidou.mybatisplus.extension.plugins.pagination.Page
对象,并调用对应的分页方法。
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Repository;@Repository
public class YourRepository {private final YourMapper yourMapper;public YourRepository(YourMapper yourMapper) {this.yourMapper = yourMapper;}public Page<YourEntity> findEntitiesWithPagination(int pageNum, int pageSize) {return yourMapper.selectPage(new Page<>(pageNum, pageSize), null);}
}
这样就完成了将MyBatis的分页改为MyBatis-Plus的分页的步骤。请根据你的具体项目和需求进行相应的修改和调整。
相关文章:
MyBatis与MyBatis-Plus的分页以及转换
一、介绍 MyBatis和MyBatis-Plus都是Java持久化框架,用于简化数据库访问和操作。它们提供了面向对象的方式来管理关系型数据库中的数据。 MyBatis是一个轻量级的持久化框架,通过XML或注解配置,将SQL语句与Java对象进行映射,使开…...
TCP/IP网络编程(二) 套接字协议及其数据传输特性
文章目录 套接字协议及其数据传输特性关于协议创建套接字协议族套接字类型1:面向连接的套接字(SOCK_STREAM)套接字类型2:面向消息的套接字(SOCK_DGRAM)协议的最终选择面向连接的套接字:TCP套接字…...

在k8s中使用secret存储敏感数据与四种用法
当需要存储敏感数据时可以使用,secret会以密文的方式存储数据。 创建secret的四种方法 (1)通过--from-literal #每个--from-literal对应一个信息条目 kubectl create secret generic mysecret --from-literalusernameadmin --from-litera…...

国产10米分辨率的卫星介绍、下载和处理教程
10米分辨率的资源卫星介绍、下载和处理教程 简介 说起免费的10米分辨率卫星影像,大家首先想到的是sentinel卫星。但其实还有我国的中巴地球资源卫星04星(CBERS04)。 中巴地球资源卫星(China Brazil Earth Resources Satellite, CBERS)是中国和巴西共同投资、联合研制的地球…...
解决SpringBoot项目war部署到tomcat下无法Nacos中注册服务问题
问题说明 怎么解决Spring Boot项目部署到tomcat下无法Nacos中注册服务问题",希望能够解决您遇到有关问题。 在使用Nacos作为注册中心的Spring Boot项目,以war包形式部署到服务器上,启动项目发现该服务无法在Nacos中注册。 分析 …...
C++中的##、#符号含义
在C中,## 和 # 是两个不同的预处理符号。这些符号都是在C的预处理阶段使用的,用于在代码编译之前对文本进行操作。 #(字符串化操作符): 用于将宏参数转换为字符串常量。 #define STRINGIZE(x) #x const char* str S…...

探究Vue3中的Composition API:优化组件逻辑的新利器
一、toRef函数 在 Vue 3.0 中,引入了一种新的响应式 API,即 toRef。toRef 函数可以将一个普通值转换为响应式引用类型,这样就可以在模板中直接使用这个响应式引用类型的属性,并且当该属性发生变化时,视图会自动更新。 <templat…...

Google Services Framework 谷歌服务框架的安装以及遇到的常见问题
安装谷歌三件套: 1、Google 服务框架(Google Services Framework)下载地址: https://www.apkmirror.com/apk/google-inc/google-services-framework/ 注意一定要选择与自己手机对应的安卓系统版本的服务框架。 2、Google Play Se…...

学习高级数据结构:探索平衡树与图的高级算法
文章目录 1. 平衡树:维护数据的平衡与高效性1.1 AVL 树:严格的平衡1.2 红黑树:近似平衡 2. 图的高级算法:建模复杂关系与优化2.1 最小生成树:寻找最优连接方式2.2 拓扑排序:解决依赖关系 拓展思考 …...
centos7离线安装neo4j
一、准备需要的rpm包 本地环境执行如下命令: docker pull couchbase/centos7-systemd docker run -it couchbase/centos7-systemd bash # 可能需要换源 yum update -y vi /etc/yum.conf # 修改其中的keepcache1 rpm --import https://debian.neo4j.com/neotechnol…...

【黑马头条之项目部署_持续集成Jenkins】
本笔记内容为黑马头条项目的项目部署_持续集成部分 目录 一、内容介绍 1、什么是持续集成 2、持续集成的好处 3、今日内容 二、软件开发模式 1、软件开发生命周期 2、软件开发瀑布模型 3、软件的敏捷开发 三、Jenkins安装配置 1、Jenkins介绍 2、Jenkins环境搭建 …...

前端自动化部署,Devops,CI/CD
DevOps 提到 Jenkins,想到的第一个概念就是 CI/CD 在这之前应该再了解一个概念。 DevOps Development 和 Operations 的组合,是一种方法论,并不特指某种技术或者工具。DevOps 是一种重视 Dev 开发人员和 Ops 运维人员之间沟通、协作的流程。…...

22 元类技术(面向切片编程)|ORM的实现|抽象类与接口类
文章目录 前情知识补充hasattr 函数setattr函数getattr函数join 函数 元类技术使用type创建类什么是元类(概念总结)\_\_metaclass\_\_属性使用metaclass 的函数方式进行创建类使用metaclass 的类方式进行创建类 自定义元类 元类实现ORM接口类与抽象类抽象…...
fuchsia系统介绍
fuchsia系统 Fuchsia,是由Google公司开发的继Android和Chrome OS之后的第三个系统,已在Github中公开的部分源码可以得知。Google对于Fuchsia的说明是“Pink(粉红)Purple(紫色)Fuchsia(灯笼海棠…...
解决Jenkins执行Python脚本不能实时输出打印信息的问题
问题: 在使用Jenkins的shell command来执行python脚本时,总是会等脚本执行完毕,最后一次性才把脚本中的print语句给打印出来; 解决方法: 在print语句后加上sys.stdout.flush(), 就可以达到实时输出的目的了。...

2021年03月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
C/C++编程(1~8级)全部真题・点这里 第1题:最小新整数 给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。 现在从m位中删除k位(0<k < m),求生成的新整数最小为多少? 例如: n = 9128456, k = 2, 则生成的新整数最小为12456 时间…...

【微服务】服务发现和管理技术框架选型调研
选型背景 方案对比 结论 结合实际业务和开发需要,着重考虑性能可靠性、功能和社区支持程度三方面,认为Nacos更适合作为服务发现和管理的技术框架。具体理由如下: 性能更好,可靠性更高 经过阿里、APISIX、SpringCloudAlibaba,阿…...

【核磁共振成像】观共享重建
目录 一、K空间关键孔技术-数据采集二、BRISK技术三、TRICKS技术四、实时成像和滑动窗重建五、心电触发电影(CINE)采集六、分段心脏采集和观共享 一、K空间关键孔技术-数据采集 对于笛卡尔K空间,一个相位编码行有时称为一个K空间观。一般情况下,每帧图像…...
〔020〕Stable Diffusion 之 骨骼姿势 篇
✨ 目录 🎈 姿势检测 / OpenPose🎈 姿势检测 OpenPose 参数介绍🎈 姿势检测 OpenPose 基本使用🎈 深度库 / Depth Lib🎈 深度库 Depth Lib 参数介绍🎈 3D姿势检测 / 3D Openpose Editor🎈 3D姿势检测 3D Openpose Editor 参数介绍🎈 3D姿势检测 3D Openpose Ed…...

使用Python进行Base64编码和解码
假设您有一个想要通过网络传输的二进制图像文件。您很惊讶对方没有正确接收该文件 - 该文件只是包含奇怪的字符! 嗯,您似乎试图以原始位和字节格式发送文件,而所使用的媒体是为流文本而设计的。 避免此类问题的解决方法是什么?答…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...