Mybatis-Plus
Mybatis-Plus
1. 介绍
1. 简介
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为
简化开发、提高效率而生。
2. 特性
- 无侵入:只做增强不做改变,引入不会对现有工程产生影响
- 损耗小:启动即自动注入基本CRUD
- 简化CRUD操作:内置通用 Mapper、通用 Service ,仅可通过少量配置即可实现单表大部分CRUD
- 支持 Lambda 表达式
- 主键自动生成
- 支持 ActiveRecord 模式
- 全局通用操作
- 代码生成器
- 内置分页插件,且支持多种数据库
- 内置性能分析插件、全局拦截插件
3. 框架结构
4. 代码及文档地址
官方地址: http://mp.baomidou.com
代码发布地址:
Github: https://github.com/baomidou/mybatis-plus
Gitee: https://gitee.com/baomidou/mybatis-plus
文档发布地址: https://baomidou.com/pages/24112f
2. 常用注解
- @TableName
MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决定,且默认操作的表名和实体类型的类名一致 ,此注解的作用是标识实体类对应的表 。
全局配置表前缀:
mybatis-plus:
configuration:
# 配置MyBatis日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
# 配置MyBatis-Plus操作表的默认前缀
table-prefix: t_
- @TableId
通过@TableId注解的value属性,指定表中的主键字段
MyBatis-Plus在实现CRUD时,会默认将id作为主键列,并在插入数据时,默认基于雪花算法的策略生成id
type属性:
全局主键策略:
mybatis-plus:
configuration:
# 配置MyBatis日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
# 配置MyBatis-Plus操作表的默认前缀
table-prefix: t_
# 主键生成策略
id-type: auto
数据库分表
单表数据拆分方式:垂直分表和水平分表
- 垂直分表
将表中某些不常用且占了大量空间的列拆分出去
- 水平分表
将表中数据独立一部分到新的表中
- 水平分表全局唯一ID怎么保持一致?
- @TableField
将实体中的属性与表字段名形成对应关系
- @TableLogic
- 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据
- 逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库
中仍旧能看到此条数据记录
3. 条件构造器和常用接口
4. 插件
4.1 分页插件
- 添加插件配置
- 测试
4.2 XML 自定义分页
4.3 乐观锁与悲观锁
- 乐观锁:乐观锁在操作数据时非常乐观,认为别人不会同时修改数据。因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃操作,否则执行操作。
- 悲观锁:悲观锁在操作数据时比较悲观,认为别人会同时修改数据。因此操作数据时直接把数据锁住,直到操作完成后才会释放锁;上锁期间其他人不能修改数据
悲观锁实现方式:synchronized、MYSQL 排它锁、Lock
乐观锁实现方式:CAS机制、版本号机制
5. 通用枚举
- 枚举类使用注解
- 配置扫描通用枚举
- 测试
6. 多数据源
适用于多种场景:纯粹多库、 读写分离、 一主多从、 混合模式等
- 引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
- 配置多数据源
- 应用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通