您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

框架之选:为什么 MyBatis-Plus 被越来越多的开发者使用

时间:2023-03-21 14:20:23  来源:今日头条  作者:不爱吃香菜的程序员

MyBatis-Plus 是一个基于 MyBatis 的增强工具,它提供了许多实用的功能和工具,可以大大简化 MyBatis 的开发过程。本文将介绍 MyBatis-Plus 的使用过程、底层原理以及相关的代码示例。

一、使用过程

1.1 添加依赖

首先,我们需要在项目中添加 MyBatis-Plus 的依赖。如果是 Maven 项目,在 pom.xml 文件中添加以下依赖即可:

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.3</version>
</dependency>

1.2 配置 MyBatis-Plus

接着,我们需要在 Spring 配置文件中配置 MyBatis-Plus。以下是一个简单的配置示例:

<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 配置 MyBatis-Plus -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mApperLocations" value="classpath*:mapper/*.xml" />
<property name="plugins">
<array>
<bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor" />
</array>
</property>
</bean>

在上面的配置中,我们配置了数据源和
MybatisSqlSessionFactoryBean,同时添加了一个分页插件。

1.3 创建实体类和 Mapper 接口

接着,我们需要创建实体类和 Mapper 接口。这里以一个简单的 User 实体类为例:

@Data
public class User {
private Long id;
private String name;
private Integer age;
private String emAIl;
}

Mapper 接口的创建也非常简单,只需要继承 BaseMapper 接口即可:

public interface UserMapper extends BaseMapper<User> {
}

1.4 使用 MyBatis-Plus 进行 CRUD 操作

MyBatis-Plus 提供了很多方便的 CRUD 操作方法,极大地简化了我们的开发流程。下面我们来一一介绍。

1.4.1 增加数据

在 MyBatis-Plus 中,增加数据最常用的方法是 insert。在使用 insert 方法时,需要注意以下几点:

1.4.1.1 自增主键

如果数据库表中的主键是自增类型,那么插入数据时需要忽略主键字段,MyBatis-Plus 会自动为你生成一个自增主键。代码如下:

User user = new User();
user.setName("test");
user.setAge(18);
userMapper.insert(user);

1.4.1.2 非自增主键

如果数据库表中的主键不是自增类型,那么插入数据时需要设置主键字段的值。代码如下:

User user = new User();
user.setId(1);
user.setName("test");
user.setAge(18);
userMapper.insert(user);

1.4.2 查询数据

在 MyBatis-Plus 中,查询数据最常用的方法是 select。在使用 select 方法时,需要注意以下几点:

1.4.2.1 查询全部数据

查询全部数据可以使用 selectList 方法。代码如下:

List<User> userList = userMapper.selectList(null);

其中,null 表示查询条件为空,即查询全部数据。

1.4.2.2 条件查询

条件查询可以使用 selectList 方法,并传入一个 Wrapper 对象作为查询条件。Wrapper 是 MyBatis-Plus 中用于封装查询条件的对象,包含多个查询条件的方法。代码如下:

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "test").gt("age", 18);
List<User> userList = userMapper.selectList(wrapper);

以上代码表示查询 name 等于 test 并且 age 大于 18 的用户数据。

1.4.2.3 分页查询

分页查询可以使用 selectPage 方法,并传入一个 Page 对象作为分页参数。Page 是 MyBatis-Plus 中用于封装分页参数的对象。代码如下:

Page<User> page = new Page<>(1, 10);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "test").gt("age", 18);
IPage<User> userPage = userMapper.selectPage(page, wrapper);
List<User> userList = userPage.getRecords();

以上代码表示查询 name 等于 test 并且 age 大于 18 的用户数据,返回第一页的数据,每页数据量为 10 条。

1.4.3 修改数据

在 MyBatis-Plus 中,修改数据最常用的方法是 update。在使用 update 方法时,需要注意以下几点:

1.4.3.1 更新全部数据

更新全部数据操作使用的方法是 update,其操作类似于 delete 和 select。我们可以通过创建一个 UpdateWrapper 对象来构建更新条件,再通过 update 方法来执行更新操作。

以下是一个示例代码,演示了如何使用 MyBatis-Plus 进行全部数据的更新:

// 创建一个 UpdateWrapper 对象
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
// 设置更新条件
updateWrapper.lambda().eq(User::getAge, 18);
// 创建一个 User 对象,表示更新后的值
User user = new User();
user.setAge(20);
// 调用 update 方法执行更新操作
userMapper.update(user, updateWrapper);

上面的代码中,我们通过 UpdateWrapper 对象设置了更新条件,然后创建了一个 User 对象表示更新后的值,最后通过 update 方法执行更新操作。

这里需要注意的是,UpdateWrapper 对象的 lambda 方法中的参数为一个函数式接口,可以通过 User::getAge 来指定更新条件的字段,然后通过 eq 方法来设置具体的条件。

更新操作的返回值为更新的数据行数,可以根据需要进行处理。

除了上述示例中的更新全部数据操作,MyBatis-Plus 还支持更新单个数据和批量更新数据的操作,这里就不再赘述。

至此,我们已经介绍了 MyBatis-Plus 的 CRUD 操作,包括查询、新增、删除和更新。在实际应用中,我们可以根据需要选择相应的操作方法,并结合 MyBatis-Plus 的其他特性,快速高效地开发出符合业务需求的应用程序。

二、底层原理

MyBatis-Plus是基于MyBatis框架的增强工具,旨在简化开发过程,提高开发效率。其底层原理主要是通过MyBatis提供的插件机制和反射机制实现的。

MyBatis-Plus 的核心是
MybatisSqlSessionFactoryBean,该类继承了 SqlSessionFactoryBean,并且覆盖了 getObject 方法。getObject 方法中调用了父类的 getObject 方法获取 SqlSessionFactory 实例,然后将其包装成 MybatisSqlSessionTemplate 对象并返回。

在 MybatisSqlSessionTemplate 中,MyBatis-Plus 又对 SqlSession 进行了封装,提供了诸如 insert、delete、update、select 等方法,并且提供了 LambdaQueryWrapper、LambdaUpdateWrapper、LambdaDeleteWrapper 等对象,可以使得操作数据库更加简单和易于理解。

同时,MyBatis-Plus 还提供了一些扩展功能,如自动填充字段值、分页查询、乐观锁、多租户等。

MyBatis提供了一个拦截器接口Interceptor,可以通过该接口在MyBatis执行SQL语句的不同阶段进行拦截和处理。MyBatis-Plus通过实现Interceptor接口,对MyBatis的SQL执行过程进行拦截,并在执行前后添加自己的逻辑处理,从而实现了对MyBatis的增强。

下面是一个简单的代码示例,对比了使用MyBatis和使用MyBatis-Plus进行分页查询的不同之处。

使用MyBatis实现分页查询:

public interface UserMapper {
List<User> findUsers(@Param("offset") int offset, @Param("limit") int limit);
}
<select id="findUsers" resultType="User">
select * from user
limit #{offset}, #{limit}
</select>

使用MyBatis-Plus实现分页查询:

Page<User> page = new Page<>(1, 10);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 18);
IPage<User> userIPage = userMapper.selectPage(page, wrapper);
List<User> records = userIPage.getRecords();

可以看到,使用MyBatis-Plus进行分页查询时,只需要创建一个Page对象和一个QueryWrapper对象,然后调用selectPage方法即可完成分页查询。而使用MyBatis则需要手动编写SQL语句,并在SQL语句中使用limit关键字进行分页。

总的来说,MyBatis-Plus的底层原理是通过实现MyBatis的插件机制和反射机制,对MyBatis的SQL执行过程进行拦截和增强,从而实现对MyBatis的简化和增强,使得操作数据库更加方便。



Tags:MyBatis   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Mybatis参数映射搞不明白?来试试这个工具吧!
之前在《使用技巧-Mybatis参数映射》《使用技巧-Mybatis参数映射(2)》提到了Mybatis的一些参数映射技巧,但是平时使用的时候有些小伙伴可能不知道自己写的#{}表达式能不能获取...【详细内容】
2024-02-28  Search: MyBatis  点击:(33)  评论:(0)  加入收藏
如何在Spring项目中配置MP(MyBatis-Plus)集成?
在Spring项目中集成MP,需要进行以下配置:1. 引入依赖:在项目的pom.xml文件中添加MP相关依赖,例如:```xml<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plu...【详细内容】
2024-01-09  Search: MyBatis  点击:(87)  评论:(0)  加入收藏
Mybatis占位符#和$的区别?源码解读
本文针对笔者日常开发中对 Mybatis 占位符 #{} 和 ${} 使用时机结合源码,思考总结而来 &bull; Mybatis 版本 3.5.11 &bull; Spring boot 版本 3.0.2 &bull; mybatis-spring...【详细内容】
2023-10-27  Search: MyBatis  点击:(399)  评论:(0)  加入收藏
看完这篇文章,你也可以手写MyBatis部分源码(JDBC)
一、持久化机制持久化(persistence): 把数据保存到可调电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化...【详细内容】
2023-10-09  Search: MyBatis  点击:(332)  评论:(0)  加入收藏
Mybatis-Flex初体验
本篇文章内容主要包括: MyBatis-Flex 介绍MyBatis-Flex 是一个优雅的 MyBatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何...【详细内容】
2023-09-24  Search: MyBatis  点击:(196)  评论:(0)  加入收藏
MyBatis简单易用的背后隐藏的挑战
MyBatis,作为一款备受欢迎的持久层框架,它的简单易用以及灵活的配置吸引了无数的开发者。然而,随着项目的不断发展,规模的逐渐扩大,MyBatis的一些挑战也开始逐渐浮出水面。首先,由...【详细内容】
2023-09-15  Search: MyBatis  点击:(242)  评论:(0)  加入收藏
MyBatis缓存机制
MyBatis 的缓存机制属于本地缓存,适用于单机系统,它的作用是减少数据库的查询次数,提高系统性能。MyBaits 中包含两级本地缓存: 一级缓存:SqlSession 级别的,是 MyBatis 自带的缓...【详细内容】
2023-09-12  Search: MyBatis  点击:(229)  评论:(0)  加入收藏
对比 MyBatis 和 MyBatis-Plus 批量插入、批量更新的性能和区别
1 环境准备1.1 搭建 MyBatis-Plus 环境 创建 maven springboot 工程 导入依赖:web 启动器、jdbc、、java 连接 mysql、Lombok、druid 连接池启动器、mybatis-plus 启动器 编...【详细内容】
2023-09-08  Search: MyBatis  点击:(191)  评论:(0)  加入收藏
Spring Data JPA 和 MyBatis 谁更强?
我无法明确的告诉你JPA和MyBatis在国内哪个会更流行,我本人更喜欢JPA,但是我本人日常开发用MyBatis多。但是我的回答绝对不是在划水,而是我多年来自己的一点小小的思考。MyBati...【详细内容】
2023-08-22  Search: MyBatis  点击:(335)  评论:(0)  加入收藏
Mybatis-Plus可能会导致数据库死锁
一、场景还原1.版本信息MySQL版本:5.6.36-82.1-logMybatis-Plus的starter版本:3.3.2存储引擎:InnoDB2.死锁现象A同学在生产环境使用了Mybatis-Plus提供的com.baomidou.mybatisp...【详细内容】
2023-08-14  Search: MyBatis  点击:(171)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(54)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(68)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(86)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(88)  评论:(0)  加入收藏
站内最新
站内热门
站内头条