1.1 ORM简介
传统JDBC编程主要步骤:
1.注册数据库驱动类,明确指定数据库URL、用户名、密码等连接信息;
2.通过DriverManager打开数据库连接;
3.通过数据库连接创建Statement对象(预执行语句对象);
4.通过Statement对象执行SQL,得到ResultSet结果对象;
5.通过ResultSet读取数据,并将数据转换为JavaBean对象;
6.关闭ResultSet、Statement对象以及数据库连接,释放相关资源;
ORM框架就是根据映射配置文件,完成数据在对象模型与关系模型之间的映射,同事屏蔽上述的重复代码。
1.2 常见持久化框架
Hibernate、JPA、、Spring JDBC、Mybatis
1.3 Mybatis 示例
MyBatis配置文件:
映射配置文件:
应用程序首先,会加载mybatis-config.xml配置文件,并根据配置文件内容创建SqlSessionFactory对象;然后,通过SqlSessionFactory对象创建SqlSession对象,SqlSession接口中定义了执行SQL语句的各种方法;之后,通过SqlSession对象执行映射配置文件中定义的SQL语句,完成相应的数据操作;最后,通过SqlSession对象提交事务,关闭SqlSession对象。
1.4 Mybatis 整体架构
MyBatis整体架构分为三层:基础支持层,核心处理层,接口层。
1.4.1 基础支持层
- 反射模块
对Java原生的反射进行封装,提供简易的API。
- 类型转换模块
实现别名的转换;实现JDBC类型与Java类型之间的转换;
- 日志模块
集成第三方日志框架
- 资源加载模块
对类加载器进行封装,确定类加载器的使用顺序,提供加载类文件以及其他资源文件的功能
- 解析器模块
对XPath进行封装,为MyBatis初始化时解析MyBatis配置文件和映射配置文件提供支持;
处理动态Sql语句中的占位符提供支持;
- 数据源模块
提供MyBatis自身数据库实现;提供对第三方数据源的集成的接口;
- 事务管理
对数据库事务进行抽象。与Spring框架集成,由Spring进行事务管理。
- 缓存模块
MyBaits提供一级缓存、二级缓存,这个两级缓存都依赖于基础支持层的缓存模块。
- Binding模块
MyBatis通过绑定模块将用户自定义的Mapper接口与映射配置文件进行关联,系统可以通过调用自定义Mapper接口中的方法执行相应的Sql语句完成数据库操作。开发人员无需编写自定义Mapper接口的实现,MyBatis会自动为其创建动态代理对象。
1.4.2 核心处理层
核心处理层实现了Mybatis的核心处理流程,包括MyBatis的初始化,完成一次数据库操作的涉及的全部流程。
- 配置解析
MyBatis在初始化过程中,会加载MyBatis配置文件、映射配置文件以及Mapper接口中的注解信息,解析后的配置信息会形成相应的对象,存储在Configuration对象中。
- SQL解析与scription脚本
动态sql解析
- SQL执行
SQL执行涉及 Executor、StatementHandler、ParameterHandler、ResultSetHandler等多个组件。
Executor主要维护一级缓存、二级缓存提供事务管理的相关操作,他会将数据库相关操作委托给StatementHandler完成。
StatementHandler首先通过ParameterHandler完成SQL语句的实参绑定,然后通过java.sql.Statement对象执行SQL语句并得到结果,最后通过ResultSetHandler完成结果集映射,得到结果对象并返回。
- 插件
1.4.3 接口层
定义了MyBatis暴露的API。