一, 简介
MyBatis 是一款优秀的持久层框架. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
Mybatis 可以将 Sql 语句配置在 xml 文件中, 避免将 Sql 语句硬编码在 Java 类中. 与 JDBC 相比:
Mybatis 通过参数映射方式, 可以将参数灵活的配置在 SQL 语句中的配置文件中, 避免在 Java 类中配置参数 (JDBC)
Mybatis 通过输出映射机制, 将结果集的检索自动映射成相应的 Java 对象, 避免对结果集手工检索 (JDBC)
Mybatis 可以通过 xml 配置文件对数据库连接进行管理.
二, 架构
我们把 Mybatis 的功能架构分为三层:
(1)API 接口层: 提供给外部使用的接口 API, 开发人员通过这些本地 API 来操纵数据库. 接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理.
(2) 数据处理层: 负责具体的 SQL 查找, SQL 解析, SQL 执行和执行结果映射处理等. 它主要的目的是根据调用的请求完成一次数据库操作.
(3) 基础支撑层: 负责最基础的功能支撑, 包括连接管理, 事务管理, 配置加载和缓存处理, 这些都是共用的东西, 将他们抽取出来作为最基础的组件. 为上层的数据处理层提供最基础的支撑.
三, 层次结构
SqlSession 作为 MyBatis 工作的主要顶层 API, 表示和数据库交互的会话, 完成必要数据库增删改查功能
Executor MyBatis 执行器, 是 MyBatis 调度的核心, 负责 SQL 语句的生成和查询缓存的维护
StatementHandler 封装了 JDBC Statement 操作, 负责对 JDBCstatement 的操作, 如设置参数, 将 Statement 结果集转换成 List 集合.
ParameterHandler 负责对用户传递的参数转换成 JDBC Statement 所需要的参数
ResultSetHandler * 负责将 JDBC 返回的 ResultSet 结果集对象转换成 List 类型的集合;
TypeHandler 负责 java 数据类型和 jdbc 数据类型之间的映射和转换
MappedStatement MappedStatement 维护了一条 < select|update|delete|insert > 节点的封
SqlSource 负责根据用户传递的 parameterObject, 动态地生成 SQL 语句, 将信息封装到 BoundSql 对象中, 并返回
BoundSql 表示动态生成的 SQL 语句以及相应的参数信息
Configuration MyBatis 所有的配置信息都维持在 Configuration 对象之中
四, 核心类
1,SqlSessionFactoryBuilder
每一个 MyBatis 的应用程序的入口是 SqlSessionFactoryBuilder.
它的作用是通过 xml 配置文件创建 Configuration 对象 (当然也可以在程序中自行创建), 然后通过 build 方法创建 SqlSessionFactory 对象. 没有必要每次访问 Mybatis 就创建一次 SqlSessionFactoryBuilder, 通常的做法是创建一个全局的对象就可以了
2,SqlSessionFactory
由 SqlSessionFactoryBuilder 创建
它的主要功能是创建 SqlSession 对象, 和 SqlSessionFactoryBuilder 对象一样, 没有必要每次访问 Mybatis 就创建一次 SqlSessionFactory, 通常的做法是创建一个全局的对象就可以了. SqlSessionFactory 对象一个必要的属性是 Configuration 对象, 它是保存 Mybatis 全局配置的一个配置对象, 通常由 SqlSessionFactoryBuilder 从 xml 配置文件创建
3,SqlSession
SqlSession 对象的主要功能是完成一次数据库的访问和结果的映射, 它类似于数据库的 session 概念, 由于不是线程安全的, 所以 SqlSession 对象的作用域需限制方法内. SqlSession 的默认实现类是 DefaultSqlSession, 它有两个必须配置的属性: Configuration 和 Executor.Configuration 前文已经描述这里不再多说. SqlSession 对数据库的操作都是通过 Executor 来完成的
4,Executor
Executor 对象在创建 Configuration 对象的时候创建, 并且缓存在 Configuration 对象里. Executor 对象的主要功能是调用 StatementHandler 访问数据库, 并将查询结果存入缓存中 (如果配置了缓存的话).
5,StatementHandler
StatementHandler 是真正访问数据库的地方, 并调用 ResultSetHandler 处理查询结果.
6,ResultSetHandler
处理查询结果.
来源: http://www.bubuko.com/infodetail-3106846.html