JavaEE主流框架总结~01.Mybatis

JavaEE主流框架总结~01.Mybatis

Mybatis

       MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

ORM

       对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法软件开发方法)发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。


Mybatis 执行流程:

Mybatis流程图:

       Configuration.xml

              该配置文件是 MyBatis 的全局配置文件,在这个文件中可以配置诸多项目。常用的内容 是别名设置,拦截器设置等。

              Properties(属性)

       将数据库连接参数单独配置在 db.properties 中,放在类路径下。这样只需要在 SqlMapConfig.xml 中加载 db.properties 的属性值。这样在 SqlMapConfig.xml 中就不需要对数 据库连接参数硬编码。

       将数据库连接参数只配置在 db.properties 中,原因:方便对参数进行统一管理

              Settings(全局配置参数)

       Mybatis 全局配置参数,全局参数将会影响 mybatis 的运行行为。比如:开启二级缓存、 开启延迟加载

              TypeAliases(类型别名)

       类型别名是为 Java 类型命名一个短的名字。它只和 XML 配置有关, 只用来减少类完 全限定名的多余部分

              Plugins(插件)

       MyBatis 允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis 允许使用 插件来拦截方法调用

              Environments(环境集合属性对象)

       MyBatis 可以配置多种环境。这会帮助你将 SQL 映射应用于多种数据库之中。但是要 记得一个很重要的问题:你可以配置多种环境,但每个数据库对应一个 SqlSessionFactory

       所以,如果你想连接两个数据库,你需要创建两个 SqlSessionFactory 实例,每个数据 库对应一个。

              Environment(环境子属性对象)
              TransactionManager(事务管理)

                            在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC|MANAGED]”)

              DataSource(数据源)

                            UNPOOLED|POOLED|JNDI

              Mappers(映射器)

                            指定映射配置文件位置

<mapper resource="org/mybatis/builder/AuthorMapper.xml"/> 
<mapper url="file:///var/mappers/AuthorMapper.xml"/> 
<mapper class="org.mybatis.builder.AuthorMapper"/> 
<package name="org.mybatis.builder"/>

Mapper.xml

       Mapper.xml 映射文件中定义了操作数据库的 sql,每个 sql 是一个 statement,映射文件 是 mybatis 的核心

       ResultMap

       Mybatis 中可以使用 resultMap 完成高级输出结果映射。如果查询出来的列名和定义的 pojo 属性名不一致,就可以通过定义一个 resultMap 对列名和 pojo 属性名之间作一个映射关 系。

              Cache

              开启二级缓存

              Select

              查询语句

              Insert

              插入语句

              Update

              更新语句

              Delete

              删除语句

              Sql

              可以重用的Sql块,也可以被其他语句引用

       Resources

       Resources 工具类会从路径中加载资源,并返回一个输入流对象,对于资源文件的加载 提供了简易的使用方法。

       加载一个资源有很多方式:

              对于简单的只读文本数据,加载为 Reader

              对于简单的只读二进制或文本数据,加载为 Stream

              对于可读写的二进制或文本文件,加载为 File

              对于只读的配置属性文件,加载为 Properties

              对于只读的通用资源,加载为 URL

       按以上的顺序,Resources 类加载资源的方法如下:

              Reader getResourceAsReader(String resource)

               InputStream getResourceAsStream(String resource)

              File getResourceAsFile(String resource)

              Properties getResourceAsProperties(String resource)

              URL getResourceAsUrl(String resource)

SqlSessionFactoryBuilder

       该类是 SqlSessionFactory(会话工厂)的构建者类,之前描述的操作其实全是从这里面 开启的,首先就是调用 XMLConfigBuilder 类的构造器来创建一个 XML 配置构建器对象, 利用这个构建器对象来调用其解析方法 parse()来完成 Configuration 对象的创建,之后以这 个配置对象为参数调用会话工厂构建者类中的 build(Configuration config)方法来完成SqlSessionFactory(会话工厂)对象的构建。

build

XMLConfigBuilder

       该类是 XML 配置构建者类, 是用来通过 XML 配置文件来构建 Configuration 对象实例, 构建的过程就是解析 Configuration.xml 配置文件的过程,期间会将从配置文件中获取到的指 定标签的值逐个添加到之前创建好的默认 Configuration 对象实例中。

Configuration

       该对象是 Mybatis 的上下文对象,实例化这个类的目的就是为了使用其对象作为项目全 局配置对象,这样通过配置文件配置的信息可以保存在这个配置对象中,而这个配置对象在 创建好之后是保存在 JVM 的 Heap 内存中的,方便随时读取。不然每次需要配置信息的时 候都要临时从磁盘配置文件中获取,代码复用性差的同时,也不利于开发

//解析配置文件
protected Environment environment;
//解析Properties对象
protected Properties variables;
//类型转换器
protected final TypeHandlerRegistry typeHandlerRegistry;
//解析Mapper映射配置文件
protected final Map<String, MappedStatement> mappedStatements;

DefaultSqlSessionFactory

       SqlsessionFactory 该 接 口 是 会 话 工 厂 , 是 用 来 生 产 会 话 的 工 厂 接 口 DefaultSqlSessionFactory 是其实现类,是真正生产会话的工厂类,这个类的实例的生命周期 是全局的,它只会在首次调用时生成一个实例(单例模式),就一直存在直到服务器关闭。

Executor

       执行器接口,SqlSession 会话是面向程序员的,而内部真正执行数据库操作的却是 Executor 执行器,可以将 Executor 看作是面向 MyBatis 执行环境的,SqlSession 就是门面货, Executor 才是实干家。通过 SqlSession 产生的数据库操作,全部是通过调用 Executor 执行器 来完成的。

       Executor 是跟 SqlSession 绑定在一起的,每一个 SqlSession 都拥有一个新的 Executor 对 象,由 Configuration 创建。

Executor 继承结构

BaseExecutor

       SimpleExecutor:每执行一次 update 或 select,就开启一个 Statement 对象,用完立刻关 闭 Statement 对象。(可以是 Statement 或 PrepareStatement 对象)

       ReuseExecutor:执行 update 或 select,以 sql 作为 key 查找 Statement 对象,存在就使用, 不存在就创建,用完后,不关闭 Statement 对象,而是放置于 Map

ResultSetHandler

       结果集处理器,如果是查询操作,必定会有返回结果,针对返回结果的操作,就要使用 ResultSetHandler 来进行处理,这个是由 StatementHandler 来进行调用的。这个处理器的作用 就是对返回结果进行处理。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值