MyBatis的核心api和执行原理
今日内容:
1.MyBatis的核心对象解释
2.MyBatis的执行流程
这篇文章主要介绍一下MyBatis的核心对象,执行的原理不会特别的深,有机会将会出几篇深入理解MyBatis核心原理的文章
文章目录
前言
要想学习好框架,熟悉框架的底层实现原理是非常重要的,虽然底层的东西一般会比较的难,但是慢慢学习吧
一、MyBatis中的核心对象
核心对象包括了MyBatis核心的api。因此要熟知各个对象的作用
①Resources
加载MyBatis的核心配置文件
InputStream inputstream = Resources.getResourceAsStream(SqlMapConfig.xml);
②SqlSessionFactoryBuilder
创建SqlSessionFactory对象
通过名字就可以知道这是一个构建器,主要是用来构建SqlSessionFactory对象,利用Resources指定的资源,将配置信息加载进内存中,并加载mybatis配置文件中指定的所有映射配置信息,并用特定的对象实例进行保存,从而创建SqlSessionFactory对象
SqlSessionFactoryBuilder创建SqlSessionFactory对象时有两种方式1.利用Resources指定资源2.硬编码的方式
SqlSessionFactory sqlSessionFactory = new SqlSessoinFactoryBuilder().build(inputStream);
③SqlSessionFactory
主要用来创建SqlSession
这是一个重量级的对象,因为SqlSeesionFactoryBuilder加载的所有配置文件都会存放在该对象中,因此它的创建比较耗时,对于这种创建和销毁都非常耗费资源的重量级对象,一个项目中只需要寻在一个即可
创建这个对象是比较耗时的,主要耗时在对mybatis全局配置文件的解析上面,全局配置文件中包含很多内容,SqlSessionFactoryBuilder通过解析这些内容,创建了一个复杂的SqlSessionFactory对象,这个对象的生命周期一般和应用的生命周期是一样的,随着应用的启动而创建,随着应用的停止而结束,所以一般是一个全局对象,一般情况下一个db对应一个SqlSessionFactory对象。
默认开启一个事务,在DML操作时需要手动提交
Sqlsession sqlsession = sqlSessionFactory.openSession();
参数设置为true表示开启自动提交
SqlSessoin openSession(boolean true);
④SqlSession
实现对数据库的CRUD操作
我们在使用JDBC对数据库进行操作时会获取一个Connection对象,然后拿着 这个对象对数据库进行操作。此时的SqlSession对象就很像Connection对象,该对象的获取可以通过SqlSessionFactory.openSession()获取一般一个操作对应一个SqlSession对象,因此这个对象时属于方法级的。方法结束后,这个对象就销毁了。
原生方法:
insert(String statement,Object parameter)
delete(String statement,Object parameter)
update(String statement,Object parameter)
<T> selectOne(String statement,Object parameter)
List<T> selectList(String statement,Object parameter)
二、MyBatis的执行原理
详细流程
1.加载mybatis的全局配置文件(数据源、mapper映射文件),解析配置文件,mybatis基于XML配置文件生成Configuration,和一个个MapperStatement(包括了参数映射配置、动态Sql语句、结果映射配置),其对应着 select|update|delete|update标签项2.SqlSessionFactoryBuilder生成SqlSeesionfactory,用来开启SqlSession
3.SqlSession对象完成和数据库的交互
3.1:用户程序调用mybatis接口层api(Mapper接口中的方法)
3.2:SqlSession通过调用api的Statement ID找到对应的MapperStatement对象
3.3:通过Executor(负责动态Sql的生成和查询缓存的维护)将MapperStatement对象进行解析,Sql参数化、动态化的sql拼接,生成jdbc 的Statement对象
3.4:JDBC执行sql
3.5:借助MapperStatement中的映射关系,将结果转换为HashMap、JavaBean等存储结构进行返回
总结
这篇文章主要介绍了MyBatis中的核心api,了解每个对象的作用是学习任何框架的前提。写一篇我们开始进入基于接口代理方式实现Dao层来发。