MyBatis第二篇:MyBatis的核心对象和执行流程必学!

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层来发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值