一、MyBatis框架整体设计(了解)
1、接口层与数据处理层
2、框架支持层与引导层
二、接口层(了解)
1、主要作用
提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理
- 使用传统的MyBatis提供的API;
- 使用Mapper接口;
2、MyBatis提供的API
1、说明
传统的传递Statement Id 和查询参数给 SqlSession 对象,使用 SqlSession对象完成和数据库的交互;
MyBatis提供了非常方便和简单的API,供用户实现对数据库的增删改查数据操作,以及对数据库连接信息和MyBatis 自身配置信息的维护操作
2、MyBatis提供的API
这是传统的传递Statement Id 和查询参数给 SqlSession 对象,使用 SqlSession对象完成和数据库的交互;MyBatis提供了非常方便和简单的API,供用户实现对数据库的增删改查数据操作,以及对数据库连接信息和MyBatis 自身配置信息的维护操作。通过sqlSession对象的增删改查方法返回相应的数据
3、使用Mapper接口
MyBatis 将配置文件中的每一个<mapper>
节点抽象为一个 Mapper 接口:
这个接口中声明的方法和<mapper>
节点中的<select|update|delete|insert>
节点项对应,即<select|update|delete|insert>
节点的id值为Mapper 接口中的方法名称,parameterType 值表示Mapper 对应方法的入参类型,而esultMap 值则对应了Mapper 接口表示的返回值类型或者返回结果集的元素类型。
三、数据处理层(了解)
1、主要作用
负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。
它主要的目的是根据调用的请求完成一次数据库操作,主要完成以下两个功能
- 通过传入参数构建动态SQL语句;
- SQL语句的执行以及封装查询结果集成List<E>;
2、参数映射和动态SQL语句生成
动态语句生成可以说是MyBatis框架非常优雅的一个设计,MyBatis通过传入的参数值,使用Ognl 来动态地构造SQL语句,使得MyBatis有很强的灵活性和扩展性。参数映射指的是对于Java数据类型和jdbc数据类型之间的转换:这里有包括两个过程:查询阶段,我们要将java类型的数据,转换成jdbc类型的数据,通过preparedStatement.setXXX()来设值;另一个就是对resultset查询结果集的jdbcType数据转换成java数据类型。
3、SQL语句的执行以及封装查询结果集成List<E>
动态SQL语句生成之后,MyBatis将执行SQL语句,并将可能返回的结果集转换成List<E> 列表。MyBatis在对结果集的处理中,支持结果集关系一对多和多对一的转换,并且有两种支持方式,一种为嵌套查询语句的查询,还有一种是嵌套结果集的查询。
四、框架支撑层(了解)
1、主要作用
负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,
将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
2、事务管理机制
事务管理机制对于ORM框架而言是不可缺少的一部分,事务管理机制的质量也是考量一个ORM框架是否优秀的一个标准
3、连接池管理机制
由于创建一个数据库连接所占用的资源比较大, 对于数据吞吐量大和访问量非常大的应用而言,连接池的设计就显得非常重要
4、缓存机制
为了提高数据利用率和减小服务器和数据库的压力,MyBatis会对于一些查询提供会话级别的数据缓存,会将对某一次查询,放置到SqlSession中,在允许的时间间隔内,对于完全相同的查询,MyBatis会直接将缓存结果返回给用户,而不用再到数据库中查找。
5、SQL语句的配置方式
传统的MyBatis配置SQL语句方式就是使用XML文件进行配置的,但是这种方式不能很好地支持面向接口编程的理念,
为了支持面向接口的编程,MyBatis引入了Mapper接口的概念,面向接口的引入,
对使用注解来配置SQL语句成为可能,用户只需要在接口上添加必要的注解即可,
不用再去配置XML文件了,但是,目前的MyBatis只是对注解配置SQL语句提供了有限的支持,
某些高级功能还是要依赖XML配置文件配置SQL语句。
六、引导层(了解)
1、主要作用
引导层是配置和启动MyBatis配置信息的方式,主要提供两种方式来引导MyBatis
- 基于XML配置文件:基于XML配置文件的方式是将MyBatis的所有配置信息放在XML文件中,MyBatis通过加载并XML配置文件,将配置文信息组装成内部的Configuration对象。
- 基于Java API:这种方式不使用XML配置文件,需要MyBatis使用者在Java代码中,手动创建Configuration对象,然后将配置参数set 进入Configuration对象中。
2、完整结构
<!-- 配置文件的根元素 -->
<configuration>
<!-- 属性:定义外部配置 -->
<properties></properties>
<!-- 设置:定义mybatis的一些全局性设置 -->
<settings>
<!-- 具体的参数名和参数值 -->
<setting name="" value=""/>
</settings>
<!-- 类型名称:为一些类定义别名 -->
<typeAliases></typeAliases>
<!-- 类型处理器:定义Java类型与数据库中的数据类型之间的转换关系 -->
<typeHandlers></typeHandlers>
<!-- 对象工厂 -->
<objectFactory type=""></objectFactory>
<!-- 插件:mybatis的插件,插件可以修改mybatis的内部运行规则 -->
<plugins>
<plugin interceptor=""></plugin>
</plugins>
<!-- 环境:配置mybatis的环境(核心) -->
<environments default="">
<!-- 环境变量:可以配置多个环境变量,比如使用多数据源时,就需要配置多个环境变量 -->
<environment id="">
<!-- 事务管理器 -->
<transactionManager type=""></transactionManager>
<!-- 数据源 -->
<dataSource type=""></dataSource>
</environment>
</environments>
<!-- 数据库厂商标识 -->
<databaseIdProvider type=""></databaseIdProvider>
<!-- 映射器:指定映射文件或者映射类 -->
<mappers></mappers>
</configuration>