一、关于MyBatis-Plus
1.1 简介
MyBatis-Plus 是一个基于 MyBatis 的加强工具,它旨在简化 MyBatis 的使用,提高开发效率。
关于Mybatis
简介
MyBatis 是一款流行的 Java 持久层框架,旨在简化 Java 应用程序与数据库之间的交互。与传统的 ORM(对象关系映射)框架不同,MyBatis 提供了更大的机动性,允许开发者自界说 SQL 语句。
发展
初始阶段 - iBatis
- 2001年:iBatis 项目由 Clinton Begin 发起,最初是一个开源项目,主要用于密码软件的开发,厥后演变成一个基于 Java 的持久层框架。
- 2004年:Clinton Begin 将 iBatis 的名字和源代码捐赠给了 Apache 软件基金会(ASF),成为 Apache 孵化器中的一个项目。在此期间,iBatis 成为了一个成熟的框架,被广泛应用于各种 Java 应用程序中。
转型期 - 从 iBatis 到 MyBatis
- 2010年6月:iBatis 项目的核心开发团队决定将项目从 ASF 迁移到 Google Code,并将项目名改为 MyBatis。这次迁移标志着 iBatis 项目的重生,并引入了一些新的特性和改进。
- 2013年11月:随着 Google Code 的服务逐步关闭,MyBatis 项目迁移至 GitHub,继续其开发和维护。
现代化与持续发展
- 自从迁移到 GitHub 后,MyBatis 社区继续活跃,项目得到了持续的更新和完善。MyBatis 通过提供更好的 API 设计、更丰富的功能以及更高的机动性,成为了许多 Java 开发者的首选持久层解决方案。
- MyBatis 的设计使其能够很好地与其他 Java 框架(如 Spring)集成,同时也支持多种数据库管理系统(DBMS),这使得它成为一个非常机动的选择。
特点
- SQL 语句映射:MyBatis 允许开发者通过 XML 或注解方式界说 SQL 语句,并将这些 SQL 语句与 Java 方法进行映射。
- 机动性:与 ORM 框架相比,MyBatis 提供了更高的 SQL 自界说本领,开发者可以手动编写复杂的 SQL 语句,以满意详细的业务需求。
- 支持多种数据库:MyBatis 支持多种关系型数据库,便于在不同的环境中使用。
- 对象关系映射:虽然 MyBatis 不像 Hibernate 那样全面支持 ORM,但它提供了根本的对象映射功能,可以将数据库表中的记录映射为 Java 对象。
- 动态 SQL:MyBatis 支持动态 SQL,可以根据条件生成不同的 SQL 语句,提高了查询的机动性。
- 缓存机制:MyBatis 提供了一级和二级缓存,能够提高数据库访问的性能,镌汰重复的数据库操作。
- 事务管理:MyBatis 支持与 Spring 等框架集成,方便管理数据库事务。
1.2 发展
MyBatis-Plus(简称 MP)是在 MyBatis 的底子上进行功能加强和扩展的一个开源项目,旨在进一步简化基于 MyBatis 的数据访问层(DAO)开发。以下是 MyBatis-Plus 的主要发展进程:
- 2016 年初:
- MyBatis-Plus 项目初始创建,最初由 baomidou (苞米豆)团队发起,旨在解决 MyBatis 使用过程中的繁琐代码和重复性工作,提供更便捷的 CRUD 操作和通用的查询功能。MyBatis-Plus 的名称直接表明了它与 MyBatis 的关系,即在 MyBatis 的底子上做了加强,而不是替代或改变 MyBatis 的原有功能。
- 功能逐步扩展:
- 初始阶段,MyBatis-Plus 主要集中在通用 CRUD 方法的封装和简化,以及一些便捷的查询功能,比如条件构造器等。
- 2017 年:
- MyBatis-Plus 在社区的支持下,逐步增加了更多实用的功能模块,如代码生成器、分页插件、性能分析插件等,使得开发者能够更高效地进行开发工作。
- 2018 年:
- MyBatis-Plus 发布了一系列更新版本,加强了对 Lambda 表达式的支持,使得在条件构造时可以更加简洁和直观,同时提高了查询的类型安全性。
- 2019 年:
- MyBatis-Plus 继续扩展其功能,引入了更多的加强特性和插件,如全局拦截器、SQL 注入器等,进一步加强了其在复杂应用场景下的机动性和扩展性。
- 2020 年以后:
- MyBatis-Plus 持续稳固更新,解决了社区反馈的 bug 和安全问题,同时继续优化和加强现有功能,保持与最新技能的兼容性和整合性。
1.3 特性
- 无侵入设计:MyBatis-Plus 对 MyBatis 的核心功能进行了加强,使用时不需要对原有的 MyBatis 代码做过多改动。
- CRUD 操作的简化:提供了通用 Mapper 和通用 Service,开发者只需继续相应的接口即可实现根本的 CRUD 操作,镌汰了重复代码。
- 条件构造器:MyBatis-Plus 提供了 Lambda 形式的条件构造器,便于进行复杂的查询条件构造,提高了代码的可读性和维护性。
- 分页插件:内置分页功能,开发者可以轻松实现数据的分页查询,无需手动编写 SQL。
- 性能分析:提供 SQL 性能分析功能,可以查看执行的 SQL 语句及其性能,便于优化。
- 代码生成器:内置代码生成器,可以根据数据库表自动生成对应的实体类、Mapper 接口等,进一步提高开发效率。
- 多种扩展功能:支持乐观锁、逻辑删除、代码生成、注解驱动等功能,加强了应用的机动性。
1.4 支持数据库
二、架构原理
2.1 核心组件
- AutoMapper:这是 MyBatis-Plus 中一个重要的抽象,它负责自动生成 CRUD 操作的 SQL 语句。开发者可以通过继续 BaseMapper 接口来实现自己的 Mapper 接口。
- ServiceImpl:这是 MyBatis-Plus 提供的服务实现类,它继续自 ServiceImpl,为 Service 层提供了一系列常用的方法。
- Entity:这是 MyBatis-Plus 中用于表示数据库表的实体类,通常继续自 BaseEntity,以便利用一些通用属性和方法。
- Configuration:配置 MyBatis-Plus 的各种行为,如分页、日志记录等。
- Interceptor:拦截器,可以用来拦截 SQL 语句,例如分页插件、性能分析插件等。
2.2 主要模块
- CRUD 操作:提供了诸如 insert(), updateById(), deleteById() 等方法,简化了 CRUD 操作。
- Lambda 表达式:允许使用 Java 8 的 Lambda 表达式来构建查询条件,提高了代码的可读性和安全性。
- 分页插件:内置的分页功能,通过简单的配置即可启用。
- 代码生成器:提供了一个命令行工具,可以快速生成底子的 Mapper、Model、Service、Controller 层代码。
- 全局拦截器:可以全局拦截 SQL 语句,进行一些额外的操作,比如记录日志、SQL 分析等。
2.3 工作原理
初始化阶段
- SqlSessionFactoryBuilder:MyBatis-Plus 使用 MyBatis 的 SqlSessionFactoryBuilder 来构建 SqlSessionFactory,这是 MyBatis-Plus 应用程序启动的第一步。
- SqlSessionFactory:SqlSessionFactory 创建 SqlSession,SqlSession 负责执行 SQL 语句,并将效果映射到 Java 对象。
- Configuration:配置文件被解析,配置 MyBatis-Plus 的各种行为,如分页插件的配置等。
执行阶段
- Mapper 接口调用:开发者通过调用 Mapper 接口中界说的方法来触发 SQL 操作。
- SQL 语句生成:根据传入的参数,MyBatis-Plus 自动生成相应的 SQL 语句。例如,使用 lambdaQuery() 方法可以生成带有条件的 SQL。
- SQL 执行:SQL 语句通过 SqlSession 执行,效果被映射到对应的 Java 对象。
- 效果返回:执行效果被封装后返回给调用方。
特别功能实现
- 分页功能:通过全局拦截器自动添加分页信息到 SQL 语句中,实现分页查询。
- 性能分析:同样通过全局拦截器记录 SQL 执行时间和慢查询,帮助优化数据库访问。
- Lambda 表达式支持:利用 Java 8 的 Lambda 表达式来构建查询条件,提高了代码的可读性和可维护性。
MyBatis-Plus 通过一系列的设计模式和插件机制,极大地简化了基于 MyBatis 的应用程序开发。它通过自动化的 CRUD 操作、Lambda 表达式支持、内置分页插件等功能,低落了开发者的负担,并提高了开发效率。同时,它还提供了代码生成器,进一步加快了开发速率。这些特性使得 MyBatis-Plus 成为一个非常受欢迎的 MyBatis 扩展工具。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |