Mybatis的原理和MybaitsPlus

简介: 这篇文章对比分析了Mybatis和Mybatis Plus的特点与底层实现机制,探讨了两者之间的差异及各自的优势。

看完Mybatis的基本操作,我们来聊下Mybaits的底层实现原理:MyBatis 是一个持久层框架,它的底层实现原理主要涉及 SQL 解析、参数映射、SQL 执行和结果映射等方面。下面是 MyBatis 的基本工作原理:

  1. 配置文件加载:MyBatis 的配置文件(通常为 mybatis-config.xml)被加载,并解析成内部的配置对象。
  2. 映射文件加载:MyBatis 根据配置文件中的映射文件路径加载相应的映射文件(通常为 XML 格式),映射文件定义了 SQL 语句、参数映射和结果映射等信息。
  3. SqlSessionFactory 的创建:通过配置文件和映射文件,MyBatis 创建一个 SqlSessionFactory 对象。SqlSessionFactory 是线程安全的,用于创建 SqlSession 对象。
  4. SqlSession 的获取:通过 SqlSessionFactory 获取 SqlSession 对象,SqlSession 是 MyBatis 中执行 SQL 操作的主要接口。
  5. SQL 解析:在执行 SQL 之前,MyBatis 首先解析映射文件中定义的 SQL 语句,并将其转换成可执行的 SQL 语句。
  6. 参数映射:MyBatis 将传入的参数与 SQL 语句中的占位符进行映射,生成完整的 SQL 语句。参数映射可以通过直接传递参数对象、使用 @Param 注解或使用命名参数等方式实现。
  7. SQL 执行:MyBatis 将生成的 SQL 语句交给底层的 JDBC 驱动程序执行。它通过 PreparedStatement 对象绑定参数,并执行 SQL 语句。
  8. 结果映射:MyBatis 将执行的结果集映射到 Java 对象中。映射过程可以通过配置文件中的结果映射定义(如 <resultMap>)或注解(如 @Results)来完成。
  9. 事务管理:MyBatis 支持事务管理,可以通过配置文件中的事务管理器来管理事务。在事务范围内,MyBatis 将自动提交或回滚事务。

它通过配置文件和映射文件来定义 SQL 语句和结果映射,并通过 SqlSession 执行 SQL 操作。MyBatis 还提供了丰富的功能和扩展点,以满足不同的持久化需求。

在Mybatis的基础上,还有Mybaits-plus,它是将常规的增删改查功能全部集成好了,只需要通过pom文件引入Mybatis-plus的jar就可以无需写xml文件而直接使用一些增删改查的基本操作了。下面对Mybatis的功能上做一些介绍,看看他都有哪些功能:

1. 代码生成器: MyBatis-Plus 提供了一个代码生成器,可以根据数据库表结构自动生成实体类、Mapper 接口和 XML 映射文件,减少手写重复代码的工作量。

2. 通用 CRUD 操作: MyBatis-Plus 提供了一套通用的 CRUD 接口和实现,简化了单表的增删改查操作。它提供了常用的查询方法,例如根据主键查询、条件查询、分页查询等。

3. 条件构造器: MyBatis-Plus 提供了灵活的条件构造器,可以通过链式调用的方式构建复杂的查询条件,支持动态条件拼接和灵活的条件组合。

4. 分页查询: MyBatis-Plus 内置了分页插件,可以方便地进行分页查询,并提供了丰富的分页参数配置选项。

5. 逻辑删除: MyBatis-Plus 支持逻辑删除功能,通过在数据库中添加一个标识字段,可以实现逻辑删除而不是物理删除数据。

6. 自动填充: MyBatis-Plus 提供了自动填充功能,可以在插入或更新操作时自动填充某些字段的值,例如创建时间、更新时间等。

7. 乐观锁支持: MyBatis-Plus 提供了乐观锁的支持,通过在实体类中添加 @Version 注解,可以实现乐观锁的并发控制。

8. 多租户支持: MyBatis-Plus 提供了多租户的支持,可以根据不同的租户标识自动进行数据隔离,简化了多租户系统的开发。

9. Lambda 表达式支持: MyBatis-Plus 支持使用 Lambda 表达式进行条件查询,可以通过类型安全的方式构造查询条件,避免了手写字符串的繁琐和错误。

10. 其他功能: MyBatis-Plus 还提供了更多实用的功能,如防止全表更新和删除、动态表名、性能分析插件等。

总体而言,MyBatis-Plus 在 MyBatis 的基础上提供了许多便捷和强大的功能,可以大幅度减少开发人员的工作量,提高开发效率和代码质量。可以看出Mybatis-plus基本已经实现了所有的常规功能,你甚至不需要写一个sql就可以完成整个项目。好了。后面章节我们再来看些每个功能的具体用法。

相关文章
|
6月前
|
SQL XML Java
|
6月前
|
SQL XML Java
一文搞懂Mybatis执行原理
一文搞懂Mybatis执行原理
162 1
|
6月前
|
SQL Java 数据库连接
mybatis常见分页技术和自定义分页原理实战
mybatis常见分页技术和自定义分页原理实战
219 0
|
4月前
|
SQL Java 数据库连接
springboot~mybatis-pagehelper原理与使用
【7月更文挑战第15天】MyBatis-PageHelper是用于MyBatis的分页插件,基于MyBatis的拦截器机制实现。它通过在SQL执行前动态修改SQL语句添加LIMIT子句以支持分页。使用时需在`pom.xml`添加依赖并配置方言等参数。示例代码: PageHelper.startPage(2, 10); List&lt;User&gt; users = userMapper.getAllUsers(); PageInfo&lt;User&gt; pageInfo = new PageInfo&lt;&gt;(users); 这使得分页查询变得简单且能获取总记录数等信息。
|
5月前
|
SQL Java 数据库连接
深入探索MyBatis Dynamic SQL:发展、原理与应用
深入探索MyBatis Dynamic SQL:发展、原理与应用
|
4月前
|
SQL Java 数据库连接
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
70 0
|
5月前
|
Java 数据库连接 数据库
MyBatis TypeHandler详解:原理与自定义实践
MyBatis TypeHandler详解:原理与自定义实践
|
5月前
|
SQL Java 数据库连接
MyBatis插件深度解析:功能、原理、使用、应用场景与最佳实践
MyBatis插件深度解析:功能、原理、使用、应用场景与最佳实践
|
6月前
|
存储 缓存 Java
探秘MyBatis缓存原理:Cache接口与实现类源码分析
探秘MyBatis缓存原理:Cache接口与实现类源码分析
97 2
探秘MyBatis缓存原理:Cache接口与实现类源码分析
|
6月前
|
SQL 缓存 Java
MyBatis原理分析之获取SqlSessionFactory
MyBatis原理分析之获取SqlSessionFactory
199 0