本页面概述了 MyBatis,这是一款流行的 Java 应用程序 SQL 映射框架,并解释了它如何融入更广泛的对象关系映射 (ORM) 概念。 与完整的 ORM 解决方案相比,MyBatis 充当 Java 应用程序和关系数据库之间的中间层,提供了一种更灵活且以 SQL 为中心的方法。
对象关系映射 (ORM) 是一种编程技术,它通过映射来创建“虚拟对象数据库”
这允许开发人员使用面向对象的范例而不是直接使用 SQL 语句来处理数据库数据。
来源:docs/database/basis.md, docs/open-source-project/system-design.md
MyBatis 与像 Hibernate 这样的完整 ORM 框架的不同之处在于,它提供了一种以 SQL 为中心的方法
| 功能 | 传统 ORM(例如,Hibernate) | MyBatis |
|---|---|---|
| SQL 控制 | 抽象掉 SQL | 开发人员直接编写 SQL |
| 学习曲线 | 更陡峭 | 对于 SQL 开发人员来说更容易上手 |
| 数据库优化 | 可能具有挑战性 | 直接 SQL 允许优化 |
| 映射复杂性 | 自动处理复杂的映射 | 需要手动映射配置 |
| 事务管理 | 内置 | 通过集成(例如,Spring) |
MyBatis 通常被描述为“半自动 ORM 映射工具”,因为它确实提供了对象关系映射功能,但它要求开发人员手动编写 SQL 语句。
来源:docs/system-design/framework/mybatis/mybatis-interview.md
下图说明了 MyBatis 的高级架构以及它如何融入典型的 Java 应用程序
来源:docs/system-design/framework/mybatis/mybatis-interview.md
MyBatis 允许开发人员在 XML 文件中定义 SQL 语句,从而将 SQL 与 Java 代码分离
在典型的 MyBatis 应用程序中,映射在与 Java 接口(Mapper)对应的 XML 文件中定义
来源:docs/system-design/framework/mybatis/mybatis-interview.md
MyBatis 最强大的功能之一是它支持动态 SQL 构建,从而允许有条件地组合查询
MyBatis 提供了 9 个动态 SQL 标签
<if><where> (也相关: trim, set)<choose> (with when, otherwise)<foreach><bind>来源:docs/system-design/framework/mybatis/mybatis-interview.md
MyBatis 在 SQL 语句中提供两种类型的参数标记
#{parameter}:创建一个 PreparedStatement 参数占位符 (?) 并安全地设置参数值${parameter}:直接文本替换(由于存在 SQL 注入风险,应谨慎使用)这种区别对于安全性和性能都非常重要
来源:docs/system-design/framework/mybatis/mybatis-interview.md
MyBatis 可以使用 Spring Boot starters 轻松地与 Spring Framework 集成,从而减少了样板配置代码
Spring 集成简化了
来源:docs/open-source-project/system-design.md
MyBatis-Plus 是 MyBatis 的增强工具,通过提供以下功能来简化开发
MyBatis-Flex 是另一个优雅的 MyBatis 增强框架,它支持
来源:docs/open-source-project/system-design.md:74-76
使用 MyBatis 时,请考虑以下性能优化策略
适当的 Executor 选择
缓存
分页
N+1 查询问题
来源:docs/system-design/framework/mybatis/mybatis-interview.md
MyBatis 提供了灵活的方式来处理对象之间的关系
一对一关系
<association> 标签一对多关系
<collection> 标签延迟加载
来源:docs/system-design/framework/mybatis/mybatis-interview.md
对于大型数据操作,MyBatis 提供了批处理功能
来源:docs/system-design/framework/mybatis/mybatis-interview.md
MyBatis 在 Java 应用程序中提供了一种平衡的数据库访问方法,使开发人员可以直接控制 SQL,同时仍然提供对象映射功能。 它的灵活性使其特别适用于具有复杂查询或性能关键型操作的应用程序,在这些应用程序中,对 SQL 的控制非常重要。
对于更复杂的 ORM 需求,如果希望抽象掉 SQL,您可能需要探索完整的 ORM 解决方案,例如 Hibernate。 有关系统设计中使用的其他框架的更多信息,请参见Spring Framework。