MyBatis 是一款优秀的 持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。它可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis 的核心特点
- 简单易学:MyBatis 的 API 非常简单,易于上手。
- 灵活:MyBatis 不会对应用程序或者数据库的现有设计强加任何影响。SQL 写在 XML 里,便于统一管理和优化。
- 解除 SQL 与程序代码的耦合:通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰。
- 提供映射标签:支持对象与数据库的 ORM 字段关系映射。
- 提供 XML 标签:支持编写动态 SQL。
MyBatis 的工作原理
- 读取配置文件 :MyBatis 通过读取配置文件(通常是
mybatis-config.xml)来获取数据库连接信息和 Mapper 映射文件的路径。 - 创建 SqlSessionFactory :根据配置文件,MyBatis 会创建一个
SqlSessionFactory对象,它是创建SqlSession的工厂。 - 创建 SqlSession :
SqlSessionFactory可以创建多个SqlSession对象,每个SqlSession代表一次与数据库的会话。 - 获取 Mapper 接口 :通过
SqlSession对象可以获取 Mapper 接口的代理对象。 - 执行 SQL 操作:调用 Mapper 接口的方法,MyBatis 会根据接口中的方法名和参数,在对应的 Mapper 映射文件中找到对应的 SQL 语句,并执行它。
- 处理结果集:MyBatis 会将 SQL 执行的结果集映射为 Java 对象,并返回给调用者。
- 关闭 SqlSession :操作完成后,需要关闭
SqlSession以释放资源。
MyBatis 的核心组件
- SqlSessionFactory :创建
SqlSession的工厂,它是 MyBatis 的核心接口之一。 - SqlSession:代表与数据库的一次会话,它提供了执行 SQL 语句的方法。
- Mapper 接口:定义了数据访问的方法,它的实现由 MyBatis 动态生成。
- Mapper 映射文件:包含了 SQL 语句和结果集映射的配置。
- Executor:MyBatis 的核心执行器,负责执行 SQL 语句。
- StatementHandler:负责处理 JDBC 的 Statement 对象。
- ResultSetHandler:负责处理 JDBC 的 ResultSet 对象,将其映射为 Java 对象。
MyBatis 的使用步骤
- 添加依赖 :在项目的构建文件(如 Maven 的
pom.xml)中添加 MyBatis 的依赖。 - 创建配置文件 :创建
mybatis-config.xml配置文件,配置数据库连接信息和 Mapper 映射文件的路径。 - 创建 Mapper 接口:定义数据访问的方法。
- 创建 Mapper 映射文件:为 Mapper 接口中的方法编写 SQL 语句和结果集映射。
- 使用 MyBatis API :通过
SqlSessionFactory创建SqlSession,获取 Mapper 接口的代理对象,调用方法执行 SQL 操作。
总结
MyBatis 是一个半自动化的持久层框架,它将 Java 对象与数据库表之间的映射关系通过 XML 或注解进行配置,同时提供了强大的动态 SQL 功能,使得开发者可以更加灵活地编写 SQL 语句,而无需关心 JDBC 的底层细节。MyBatis 具有简单易学、灵活高效、易于扩展等优点,广泛应用于各种 Java 项目中。