asp 网站模板,如何选择邯郸做网站,湖南网站建设公司,有哪些竞价网站Mybatis总体框架设计 文章目录 Mybatis总体框架设计一#xff1a;MyBatis架构概览1#xff1a;接口层1.1#xff1a;使用传统的MyBatis提供的API1.2#xff1a;使用Mapper接口 2#xff1a;数据处理层【核心】2.1#xff1a;参数映射和动态SQL语句生成2.2#xff1a;SQL…Mybatis总体框架设计 文章目录 Mybatis总体框架设计一MyBatis架构概览1接口层1.1使用传统的MyBatis提供的API1.2使用Mapper接口 2数据处理层【核心】2.1参数映射和动态SQL语句生成2.2SQL语句的执行以及封装结果集 3框架支撑层4引导层 二主要构件及其相互关系1核心构件的层次关系2核心部件说明 MyBatis整体架构包含哪些层呢这些层次是如何设计的呢 一MyBatis架构概览 1接口层 接口层主要负责处理和数据库交互的方式门面 MyBatis和数据库的交互有两种方式使用传统的MyBatis提供的API 使用Mapper接口
1.1使用传统的MyBatis提供的API
这是传统的传递Statement Id 和查询参数给 SqlSession 对象使用 SqlSession对象完成和数据库的交互 MyBatis 提供了非常方便和简单的API供用户实现对数据库的增删改查数据操作以及对数据库连接信息和MyBatis 自身配置信息的维护操作 上述使用MyBatis 的方法是创建一个和数据库打交道的SqlSession对象
然后根据Statement Id 和参数来操作数据库这种方式固然很简单和实用但是它不符合面向对象语言的概念和面向接口编程的编程习惯。
由于面向接口的编程是面向对象的大趋势MyBatis 为了适应这一趋势增加了第二种使用MyBatis 支持接口Interface调用方式
1.2使用Mapper接口
MyBatis 将配置文件中的每一个mapper 节点抽象为一个 Mapper 接口
而这个接口中声明的方法和跟 mapper 节点中的select|update|delete|insert 节点项对应即
select|update|delete|insert 节点的id值 Mapper 接口中的方法名称parameterType 值 Mapper 对应方法的入参类型而 resultMap 值 Mapper 接口表示的返回值类型或者返回结果集的元素类型 根据 MyBatis 的配置规范配置好后通过 SqlSession.getMapper(XXXMapper.class) 方法MyBatis 会根据相应的接口声明的方法信息通过动态代理机制生成一个 Mapper 实例[代理模式] 我们使用 Mapper 接口的某一个方法时MyBatis 会根据这个方法的方法名和参数类型确定Statement Id
底层还是通过 SqlSession.select(id, param); 或 SqlSession.update(id, param); 等等来实现对数据库的操作
MyBatis 引用 Mapper 接口这种调用方式纯粹是为了满足面向接口编程的需要。
其实还有一个原因是在于面向接口的编程使得用户在接口上可以使用注解来配置SQL语句这样就可以脱离XML配置文件实现“0配置”
2数据处理层【核心】
数据处理层可以说是MyBatis 的核心从大的方面上讲它要完成两个功能
通过传入参数构建动态SQL语句 paramObject - SQL语句SQL语句的执行以及封装查询结果集成 List SQL语句 - execute result - List
2.1参数映射和动态SQL语句生成
动态语句生成可以说是MyBatis框架非常优雅的一个设计MyBatis 通过传入的参数值使用 Ognl 来动态地构造SQL语句
这使得MyBatis 有很强的灵活性和扩展性。
参数映射指的是对于 java 数据类型 - jdbc数据类型之间的转换这里有包括两个过程
查询阶段要将java类型的数据转换成jdbc类型的数据通过 preparedStatement.setXXX() 来设值结果阶段就是对resultset查询结果集的jdbcType 数据转换成java 数据类型 2.2SQL语句的执行以及封装结果集
动态SQL语句生成之后MyBatis 将执行SQL语句并将可能返回的结果集转换成ListE 列表。
MyBatis 在对结果集的处理中支持结果集关系一对多(1 ~ N)和多对一(N ~ 1)的转换并且有两种支持方式
一种为嵌套查询语句的查询还有一种是嵌套结果集的查询
3框架支撑层 事务管理机制 事务管理机制对于ORM框架而言是不可缺少的一部分事务管理机制的质量也是考量一个ORM框架是否优秀的一个标准 连接池管理机制 由于创建一个数据库连接所占用的资源比较大对于数据吞吐量大和访问量非常大的应用而言连接池的设计就显得非常重要 缓存机制 为了提高数据利用率和减小服务器和数据库的压力MyBatis 会对于一些查询提供会话级别的数据缓存
数据缓存会将对某一次查询放置到SqlSession 中
缓存可是使得在允许的时间间隔内对于完全相同的查询MyBatis 会直接将缓存结果返回给用户而不用再到数据库中查找 SQL语句的配置方式 传统的MyBatis 配置 SQL 语句方式就是使用 XML 文件进行配置的但是这种方式不能很好地支持面向接口编程的理念
为了支持面向接口的编程MyBatis 引入了 Mapper 接口的概念面向接口的引入对使用注解来配置 SQL 语句成为可能
用户只需要在接口上添加必要的注解即可不用再去配置XML文件了
但是目前的 MyBatis 只是对注解配置 SQL 语句提供了有限的支持某些高级功能还是要依赖 XML 配置文件配置 SQL 语句
4引导层
引导层是配置和启动MyBatis配置信息的方式。 MyBatis 提供两种方式来引导MyBatis
基于XML配置文件的方式基于Java API 的方式
二主要构件及其相互关系
1核心构件的层次关系 2核心部件说明
主要的核心部件如下
核心部件解释说明SqlSession作为MyBatis工作的主要顶层API表示和数据库交互的会话完成必要数据库增删改查功能ExecutorMyBatis 执行器是 MyBatis 调度的核心负责SQL语句的生成和查询缓存的维护StatementHandler封装了JDBC Statement操作负责对JDBC statement 的操作如设置参数、将Statement结果集转换成List集合ParameterHandler负责对用户传递的参数转换成JDBC Statement 所需要的参数(param - Statement)ResultSetHandler负责将JDBC返回的ResultSet结果集对象转换成List类型的集合(resultSet - List)TypeHandler负责java数据类型和jdbc数据类型之间的映射和转换(数据映射)MappedStatement维护了一条selectSqlSource负责根据用户传递的parameterObject动态地生成SQL语句将信息封装到BoundSql对象中并返回BoundSql表示动态生成的SQL语句以及相应的参数信息ConfigurationMyBatis所有的配置信息都维持在Configuration对象之中