【3】MyBatis-Plus快速入门
MyBatisPlus快速入门
需要的基础:
- MyBatis
- Spring
- SpringMVC
- 是什么?
- MyBatis 本来就是简化 JDBC 操作的!
- 官网:https://mp.baomidou.com/ MyBatis Plus,简化 MyBatis
1.MyBatisPlus概述
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
愿景
- 是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
特性
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
- 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
- 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
框架结构
-
总结:扫描实体类型,分析数据库的表和字段直接把sql注入到mybatis的容器中不用写sql
(不用写mapper.xml 秀儿)),简化了mybatis的开发。
代码托管
相关链接
教程
- MyBatis-Plus 入门 - 视频教程 - 慕课网
- MyBatis-Plus 进阶 - 视频教程 - 慕课网
- MyBatis-Plus + SpringBoot实现简单权限管理 - 视频教程 - 慕课网
原理
2.快速入门
- 教程地址:https://mp.baomidou.com/guide/quick-start.html
- 以下将通过一个简单的 Demo 来阐述 MyBatis-Plus 的强大功能,在此之前,我们假设您已经:
- 拥有 Java 开发环境以及相应 IDE
- 熟悉 Spring Boot
- 熟悉 Maven
- 创建一个数据库mybatis_plus
- 操作如下语句,创建数据表,插入数据。
如果从零开始用 MyBatis-Plus 来实现该表的增删改查我们需要做什么呢?
-
导入对应的依赖
-
研究依赖如何配置
-
代码如何编写
-
提高扩展技术能力!
- 创建一个空的 Spring Boot 工程(工程将以 H2 作为默认数据库进行演示)
- 导入依赖,引入
spring-boot-starter
、spring-boot-starter-test
、mybatis-plus-boot-starter
、h2
依赖:
- 说明:我们使用 mybatis-plus 可以节省我们大量的代码,尽量不要同时导入 mybatis 和 mybatis plus!版本的差异!
- 连接数据库!这一步和 mybatis 相同!
- 传统方式pojo-dao(连接mybatis,配置mapper.xml文件)-service-controller,使用了mybatis-plus 之后:
- pojo
- mapper接口
- 在 Spring Boot 启动类中添加
@MapperScan
注解,扫描Mapper包下的所有接口:
- 测试类中测试:
提示:UserMapper 中的
selectList()
方法的参数为 MP 内置的条件封装器Wrapper
,所以不填写就是无任何条件。
- 控制台输出:
小结一下:
- 通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!
- 从以上步骤中,我们可以看到集成
MyBatis-Plus
非常的简单,只需要引入 starter 工程,并配置 mapper 扫描路径即可。
思考问题:
- sql谁帮我们写的?—mybatis-plus
- 方法谁帮我们写的?—mybatis-plus
3.配置日志
- 所有的sql现在是不可见的,如果我想知道它是怎么执行的,所以我必须要看日志!
- 配置完毕日志之后,后面的学习就需要注意这个自动生成的SQL,我们就会喜欢上 MyBatis-Plus!
4.CRUD
1.插入操作
- 输出测试:
- 数据库插入的id的默认值为:全局的唯—id。
2.主键生成策略
默认 ID_WORKER 全局唯一id
- 分布式系统唯一id生成:查看博客园
- 分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种。
雪花算法:
- snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。SnowFlake算法生成id的结果是一个64bit大小的整数。
- 其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。可以保证几乎全球唯一!
算法实现:
- Twitter官方给出的算法实现 是用Scala写的,这里不做分析,可自行查看。
- Java版算法实现:搬运自犀牛饲养员
主键自增
- 需要配置主键自增:
- 实体类字段上
@TableId(type = IdType.AUTO)
- 数据库字段一定要是自增!
- 再次测试插入!
相关源码解释:
3.更新操作
- 所有的sql都是自动帮我们动态配置的!
4.自动填充
创建时间、更改时间! 这些操作一般都是自动化完成,我们不希望手动更新。
阿里巴巴开发手册︰几乎所有的表都要配置 gmt_create、gmt_modified !而且需要自动化。
方式一:数据库级别(工作中不允许修改数据库级别)
- 在表中增加字段:
create_time,update_time
- 再次测试插入或更新方法,需要在实体类中同步!
- 查看结果
方式二:代码级别
- 删除数据库的默认值,更新操作!
- 实体类字段属性上需要增加注解
- 编写处理器来处理这个注解即可!
- 测试插入/更新,观察时间
5.乐观锁和悲观锁
乐观锁:顾名思义十分乐观,他总是认为不会出现问题,无论干什么都不上锁!如果出现了问题,再次更新值测试。
悲观锁:顾名思义十分悲观,他总是认为出现问题,无论干什么都会上锁!再去操作!
这里主要讲解:乐观锁机制!
乐观锁实现方式:
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时,set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
测试一下Mybatis-Plus乐观锁插件
- 给数据库中增加version字段
- 实体类加对应的字段
- 注册组件
- 测试一下:
6.查询操作
7.分页查询
分页在网站使用的十分之多!
- 原始的 limit 进行分页
- pageHelper 第三方插件
- MP 其实也内置了分页插件!
具体使用:
- 配置拦截器组件即可!
- 直接使用Page对象即可!
8.删除操作
根据 id 删除记录
通过map删除
9.逻辑删除
物理删除 :从数据库中直接移除;
逻辑删除 :再数据库中没有被移除,而是通过一个变量来让他失效! deleted = 0 => deleted = 1;
- 管理员可以查看被删除的记录!防止数据的丢失,类似于回收站!
测试一下:
- 在数据表中增加一个 deleted 字段
- 实体类中增加属性
- 配置
4.测试!
- 走的是更新,不是删除操作!记录依旧在数据库,但是值确已经变化了!
- 以上的所有CRUD操作及其扩展操作,都必须精通掌握!会大大提高你的工作和写项目的效率!
5.性能分析插件
- 在平时的开发中,会遇到一些慢sql。测试! druid,,,,,
- 作用:性能分析拦截器,用于输出每条 SQL 语句及其执行时间
- MP也提供性能分析插件,如果超过这个时间就停止运行!
- 导入插件
- 注意:要在SpringBoot中配置环境为dev或者 test 环境!
- 测试一下!
- 使用性能分析插件,可以帮助我们提高效率!
6.条件构造器Wrapper
测试一
测试二
测试三
测试四
测试五()
测试六
7.代码自动生成器
AutoGenerator
是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,极大的提升了开发效率。
旧版测试:
新版测试
- 导入依赖
- java
8.多数据源
- 适用于多种场景:纯粹多库、 读写分离、 一主多从、混合模式等。
- 目前我们就来模拟一个纯粹多库的一个场景,其他场景类似。
- 场景说明:
- 创建两个库,分别为:mybatis_plus(以前的库不动)与mybatis_plus_1(新建);
- 将mybatis_plus库的product表移动到mybatis_plus_1库,这样每个库一张表;
- 通过一个测试用例分别获取用户数据与商品数据,如果获取到说明多库模拟成功。
创建数据库mybatis_plus_1和表product
新建一个spring boot项目,引入依赖:
配置多数据源
创建实体类
创建mapper
启动类
创建用户service
创建商品service
测试
9.MyBatisX插件
MyBatis-Plus为我们提供了强大的mapper和service模板,能够大大的提高开发效率。但是在真正开发过程中,MyBatis-Plus并不能为我们解决所有问题,例如一些复杂的SQL,多表联查,我们就需要自己去编写代码和SQL语句,我们该如何快速的解决这个问题呢,这个时候可以使用MyBatisX插件MyBatisX一款基于 IDEA 的快速开发插件,为效率而生。
- MyBatisX插件用法:https://baomidou.com/pages/ba5b24
安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入
mybatisx
搜索并安装。
功能:
JPA 提示
🎉结束了🎉
__EOF__

本文链接:https://www.cnblogs.com/The1Yu/p/15968925.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?