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

SpringCloud-持久层框架MyBatis Plus的使用与原理详解

在现代微服务架构中,SpringCloud 是一个非常流行的解决方案。而在数据库操作层面,MyBatis Plus 作为 MyBatis 的增强工具,能够简化开发,提升效率,特别是在开发企业级应用和分布式系统时尤为有用。本文将详细介绍 MyBatis Plus 的使用方法、原理及其与 MyBatis 的区别。

在这里插入图片描述


一、MyBatis Plus 简介

1. MyBatis 简介

MyBatis 是一个优秀的 ORM 框架,它通过 XML 或注解的方式将 Java 方法与 SQL 语句进行映射,并且可以灵活地控制 SQL 执行的各个细节,提供极高的自由度。它广泛应用于项目中,尤其是在对 SQL 语句要求比较严格的场景中。

2. MyBatis Plus 介绍

MyBatis Plus 是在 MyBatis 的基础上进行增强的持久层框架,专注于简化 MyBatis 的开发工作。它封装了常用的 CRUD 操作,极大地减少了开发者编写 SQL 的工作量。其目标是“更少的配置,更多的功能”,通过插件机制提供更强大的功能扩展。

3. MyBatis 与 MyBatis Plus 的对比

对比项MyBatisMyBatis Plus
核心理念手写 SQL,灵活但需要大量的 SQL 代码自动化 CRUD,大大减少手写 SQL
SQL 编写需要手动编写所有 SQL 语句提供默认 CRUD 接口,只需少量自定义 SQL
复杂查询需要手动编写复杂 SQL 语句提供条件构造器,简化复杂查询操作
分页需要手动编写分页逻辑内置分页插件,简化分页操作
性能优化自定义 SQL 性能优化较灵活提供多种插件支持性能优化,如 SQL 执行分析插件
代码生成不支持代码生成提供自动代码生成器,支持一键生成 Mapper、Service 等
扩展能力通过配置扩展内置多种插件机制,支持扩展,如乐观锁、审计等

通过这张对比表可以看出,MyBatis Plus 在开发效率和功能扩展上具有显著优势,尤其在企业级开发中,可以大大简化数据库操作的工作。


二、MyBatis Plus 的基本使用

1. 基础依赖和配置

要在 SpringCloud 中使用 MyBatis Plus,首先需要在项目的 pom.xml 中添加 MyBatis Plus 的依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.4</version>
</dependency>

接下来,在 application.yml 中配置数据库连接:

spring:datasource:url: jdbc:mysql://localhost:3306/your_database?useSSL=falseusername: rootpassword: your_passwordmybatis-plus:mapper-locations: classpath:/mapper/*.xml

2. 实体类的定义

在 MyBatis Plus 中,实体类是映射数据库表的核心。在实体类中,常用 @TableName@TableId 注解来映射表和主键。

@Data
@TableName("user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;private String email;
}

3. Mapper 接口的编写

Mapper 接口是 MyBatis Plus 提供的基础 CRUD 接口,继承 BaseMapper 就可以拥有常用的 CRUD 功能,无需额外编写 SQL。

public interface UserMapper extends BaseMapper<User> {
}

4. Service 层的实现

为了更好地管理业务逻辑,通常会在 Service 层中编写业务方法。可以通过注入 Mapper 来实现对数据库的操作。

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getAllUsers() {return userMapper.selectList(null);}public void createUser(User user) {userMapper.insert(user);}
}

三、MyBatis Plus 的高级用法

1. 分页插件

分页是大多数系统必备的功能。MyBatis Plus 内置分页插件,可以通过简单的配置实现高效分页。

@Autowired
private UserMapper userMapper;public IPage<User> getUsersPage(int pageNum, int pageSize) {Page<User> page = new Page<>(pageNum, pageSize);return userMapper.selectPage(page, null);
}

2. 乐观锁插件

MyBatis Plus 支持乐观锁,防止多个用户同时修改同一条数据时的并发问题。可以通过在实体类上添加 @Version 注解来启用乐观锁功能。

@Data
@TableName("user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;private String email;@Versionprivate Integer version; // 乐观锁版本字段
}

3. 多租户插件

MyBatis Plus 提供了多租户插件,支持在多租户架构中为每个租户分配独立的数据空间,避免数据泄露或冲突。

@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 多租户插件配置TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor();interceptor.addInnerInterceptor(tenantLineInnerInterceptor);return interceptor;}
}

4. 自动填充功能

MyBatis Plus 支持自动填充常见字段,如创建时间、更新时间等。可以通过 @TableField 注解配置字段的自动填充策略。

@Data
@TableName("user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;private String email;@TableField(fill = FieldFill.INSERT)private Date createTime; // 自动填充创建时间@TableField(fill = FieldFill.INSERT_UPDATE)private Date updateTime; // 自动填充更新时间
}

5. 逻辑删除功能

逻辑删除是一种不物理删除数据,而是通过标记删除状态的方式实现删除。MyBatis Plus 提供了逻辑删除支持,可以通过 @TableLogic 注解实现。

@Data
@TableName("user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;private String email;@TableLogicprivate Integer deleted; // 逻辑删除字段
}

四、MyBatis Plus 原理详解

MyBatis Plus 的原理是基于 MyBatis 的核心功能进行增强,主要通过 插件机制代码生成机制 提供额外的功能支持。

1. 基于 MyBatis 核心的增强

MyBatis Plus 是对 MyBatis 的扩展和增强,在 MyBatis 的基础上引入了大量的插件和自定义功能。例如,通过扩展 BaseMapper,MyBatis Plus 为所有实体类提供了基础的 CRUD 功能,开发者无需编写重复的 SQL。

2. 插件机制

MyBatis Plus 的插件机制非常灵活,允许开发者自定义插件,扩展 MyBatis Plus 的功能。MyBatis Plus 通过 责任链模式 处理多个插件请求,插件之间通过 链式调用 实现功能的扩展。

常见的插件包括:

  • 分页插件:通过在 SQL 执行前后进行拦截,实现分页功能。
  • 多租户插件:通过在 SQL 中自动加入租户 ID 实现数据隔离。
  • 乐观锁插件:通过在 SQL 中自动加入版本号实现并发控制。

3. 条件构造器

MyBatis Plus 提供了 条件构造器,简化了复杂 SQL 的拼装过程。条件构造器基于 Lambda 表达式,能够灵活构建动态查询条件,极大地简化了 SQL 的编写工作。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getName, "Tom").ge(User::getAge, 18);
List<User> users = userMapper.selectList(queryWrapper);

4. 自动代码生成器

MyBatis Plus 提供了自动代码生成器,支持通过数据库表结构自动生成实体类、Mapper、Service、Controller 等层的代码,大幅减少手工编写代码的工作量。这一特性非常适合大型项目和快速迭代开发的场景。

5. 动态 SQL 解析

MyBatis Plus 支持动态 SQL 解析,通过注解或 XML 方式在运行时解析 SQL,生成最终的 SQL 语句。这种方式使得 SQL 编写更加灵活,能够适应复杂的业务逻辑。


五、MyBatis Plus 的使用总结

MyBatis Plus 在简化 MyBatis 开发工作、提升开发效率和灵活性方面表现出色。它不仅保留了 MyBatis 的强大 SQL 自定义功能,还通过插件机制和自动化工具提供了更多的扩展功能。

MyBatis Plus 的核心优势:

优势说明
自动化 CRUD通过内置的 CRUD 接口,减少了开发者手动编写 SQL 的工作量。
分页和多租户支持MyBatis Plus 内置分页和多租户插件,能够轻松处理复杂的查询场景。
性能优化通过插件机制和缓存机制,MyBatis Plus 提供多种性能优化手段,保证高效的数据库操作。
代码生成器自动生成常用代码,提升开发效率,加快项目开发速度。

总之,MyBatis Plus 是 SpringCloud 项目中非常优秀的持久层框架。通过其丰富的功能和灵活的扩展机制,可以大幅提升开发效率,特别适用于大规模分布式系统的开发。

在这里插入图片描述

查看全文
http://www.mlqm.cn/news/216274.html

相关文章:

  • 通过Express + Vue3从零构建一个用户认证与授权系统(一)项目结构设计
  • DDPM浅析
  • linux 效率化 - zsh + tmux
  • MFC扩展库BCGControlBar Pro v35.1新版亮点:改进网格控件性能
  • “我们为什么缺少科学精神”演讲内容拆解
  • 前端vue部署网站
  • JS 怎么监听复制事件 并获取复制内容 并修改复制文本内容
  • CogVideo: Large-scale Pretraining for Text-to-Video Generation via Transformers
  • PythonAI 学习大纲
  • 植物大战僵尸杂交版之后新作:植物大战僵尸射击版(可在安卓手机上玩,文末附下载链接)
  • 什么是编译器?
  • 【SpringBoot详细教程】-14-Spring Secruity 安全管理【持续更新】
  • 搭建localhost本地 ChatGPT 模型与总结
  • 申请书阿拉伯语翻译的特点
  • 彻底理解TypeScript对象语法
  • Flask和常用框架的对比
  • 【系统架构设计师】目录提纲
  • 01数组算法/代码随想录
  • 使用OpenCV实现基于EigenFaces的人脸识别
  • SQL第15课——插入数据
  • STM32的独立看门狗定时器(IWDG)技术介绍
  • mysql学习教程,从入门到精通,SQL子查询(38)
  • 软考中级网络工程师——高级配置
  • 教程:宏基因组数据分析教程
  • C0023.在Clion中创建控件,对控件进行提升为自定义控件的步骤
  • 利士策分享,财富和命运,天生注定?
  • Spring框架中的单例Bean是线程安全的么?
  • 服务器CPU占满原因定位
  • HTML+CSS总结【量大管饱】
  • MySQL 【日期】函数大全(二)
  • CopyRight © 尧图建网站版权所有

    玻璃钢生产厂家济源景观园林玻璃钢雕塑公司商场展台美陈玻璃钢人物雕塑广场山西动物玻璃钢雕塑方法北京商场创意商业美陈公司焦作玻璃钢彩绘雕塑定做厂家定西玻璃钢雕塑企业附近玻璃钢景观雕塑定做价格玻璃钢动物牛雕塑公司推荐南京玻璃钢花盆市场鼎湖玻璃钢花盆花器室外雕塑材质 玻璃钢新郑镂空玻璃钢人物雕塑树脂雕塑便宜还是玻璃钢便宜惠州商场美陈雕塑定制普陀商场美陈玻璃钢雕塑最好的厂烟台喜妹玻璃钢雕塑玻璃钢花盆室外能用几年玻璃钢雕塑利润空间河北商场主题创意商业美陈作品四川玻璃钢孔子雕塑湛江黑色大口径玻璃钢花盆深圳季节性商场美陈供应商商场美陈气球落地折纸玻璃钢雕塑制作哪家专业哪里有玻璃钢卡通雕塑定制河西商场美陈布置绍兴玻璃钢陶瓷雕塑尺寸张掖抽象人物玻璃钢雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

    玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化