什么是MyBatis?
一. 什么是 MyBatis?
MyBatis 是一款 开源的持久层框架,用于简化 Java 应用与数据库之间的交互。它最初名为 iBatis,2010 年由 Apache 迁移至 GitHub 并更名为 MyBatis。
核心目标:将 SQL 语句从 Java 代码中解耦,通过配置文件或注解定义数据库操作,使开发者可以专注于 SQL 本身,同时保留对 SQL 的完全控制。定位:介于 手动 JDBC 编程 和 全自动 ORM 框架(如 Hibernate) 之间,兼具灵活性和开发效率。二. MyBatis 的核心特点SQL 与代码分离
通过 XML 文件(或注解)定义 SQL,Java 代码仅负责逻辑调用,便于维护和优化 SQL。半自动化 ORM支持对象与数据库表的映射(如 ResultMap),但需手动编写 SQL,而非完全自动生成。适合复杂查询场景(如多表关联、动态条件),避免全自动框架的性能损耗。动态 SQL
提供
适配 MySQL、Oracle、SQL Server 等主流数据库,通过数据源配置切换。插件扩展
支持自定义插件(如分页插件 PageHelper、性能监控插件),增强功能。三. 核心组件与架构MyBatis 的主要组件包括:
配置文件(核心配置文件)
文件名通常为 mybatis-config.xml,用于配置数据源(数据库连接信息)、事务管理器、插件、映射文件路径等。代码语言:txt复制xml
映射文件(Mapper XML)
SqlSessionFactory
核心工厂类,通过读取配置文件创建,用于生成 SqlSession。通常使用 SqlSessionFactoryBuilder 构建(建议使用单例模式)。SqlSession
会话对象,用于执行 SQL、提交 / 回滚事务、获取 Mapper 接口实例。代码语言:txt复制示例:java
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class); // 获取 Mapper 实例
User user = mapper.getUserById(1); // 调用接口方法
}
四. 工作流程
加载配置
读取 mybatis-config.xml 和映射文件,解析为配置对象。创建 SqlSessionFactory
通过 SqlSessionFactoryBuilder 构建工厂,用于管理会话。获取 SqlSession
通过工厂打开会话,会话封装了数据库连接和操作方法。执行数据库操作
通过 SqlSession.getMapper() 获取 Mapper 接口实例,调用方法时 MyBatis 会匹配映射文件中的 SQL 并执行。处理结果
将数据库结果集按 resultType 或 resultMap 映射为 Java 对象。提交 / 回滚事务
手动提交(默认不自动提交)或通过 SqlSession.commit()/rollback() 控制。关闭会话
释放资源,建议使用 try-with-resources 自动关闭。五. 优势与适用场景优势:
灵活控制 SQL:适合复杂查询(如多表关联、动态条件),避免 ORM 框架的自动生成限制。性能优化:手写 SQL 可针对性优化,适合对性能敏感的项目。学习成本低:比 JDBC 更简洁,比 Hibernate 更易掌握 SQL 主导的开发模式。适用场景:
复杂业务场景:需要大量自定义 SQL(如电商订单查询、报表统计)。遗留系统适配:需兼容老旧数据库表结构,或与存储过程、视图深度结合。性能优先项目:如高频交易系统,需精细优化 SQL 执行效率。六. 与其他框架对比vs Hibernate(全自动 ORM):MyBatis 需手动编写 SQL,灵活性高,适合复杂查询;Hibernate 自动生成 SQL,适合简单 CRUD。vs 原生 JDBC:MyBatis 封装了 JDBC 繁琐的资源管理(如连接、PreparedStatement、结果集处理),减少样板代码。MyBatis 的核心逻辑是 “以 SQL 为中心”,通过配置和映射将数据库操作与业务代码解耦,在保持灵活性的同时提升开发效率。后续可通过具体示例进一步演示其使用步骤(如环境搭建、CRUD 实现、动态 SQL 等)。