Mybatis源码分析

我们都知道MyBatis它是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,帮我们节省了许多时间与精力,今天我们主要来对Mybatis的底层源码进行分析,主要是以下4行代码。

Mybatis源码分析

1.获取传入的XML文件的输入流

Mybatis源码分析

首先调用Resources中的单个String参数的getResuorceAsStream(String resource)方法,传入mybatis-config.xml文件。

然后该方法里面又调用了本类中的两个参数的getResuorceAsStream(ClassLoader loader,String resource)方法。

此方法里面再调用classLoaderWrapper中的getResourceAsStream(String resource, ClassLoader classLoader)方法,然后这个方法里面再调用了本类中的getResourceAsStream(String resource, ClassLoader[ ] classLoader)方法,可以看到这里传入的第二个参数是ClassLoader类加载器数组。数组中还有ClassLoaderWrapper中成员变量默认的类加载器、当前线程的类加载器、当前对象的类加载器以及系统类加载器五个类加载器。

Mybatis源码分析

最后通过对classLoader[ ]数组进行,然后进行判断,看类加载器中所读的流是否为null,如果不为null,最后则返回InputStream对象。

2.获取SqlSessionFactory对象

Mybatis源码分析

创建完SqlSessionFactoryBuilder对象之后,调用build(InputStream inputStream)方法。

再调用本类带三个参数的重载的build(InputStream inputStream, String environment, Properties properties)方法。

然后创建解析器parser,通过Xpath解析的方式去解析mybatis-config.xml 文件。

把配置文件的信息解析并保存在Configuration对象中,这个Configuration对象相当于 mybatis-config.xml 中的配置文件所对应的类。

最后返回包含Configuration的DefaultSqlSession对象。

3.获取SqlSession对象

Mybatis源码分析

通过之前返回的DefaultSqlSessionFactory对象,调用它的openSession()方法。

再调用本类中的openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit)方法。

创建事务tx,获取environment信息,通过environment构建出transactionFactory事务工厂,再通过事务工厂对事物进行设置。

newExecutor(),根据Executor在全局配置中的类型,创建出对应的执行器。如果有二级缓存配置开启,创建CachingExecutor(executor)。

通过Executor、事务自动提交以及配置文件对象(Configuration)返回 DefaultSqlSession对象。

4.获取mapper

Mybatis源码分析

调用DefaultSqlSession中getMapper(Class<T> type)方法。

再调用Configuration中的getMapper(Class<T> type, SqlSession sqlSession)方法。

再调用MapperRegistry中的getMapper(Class<T> type, SqlSession sqlSession)方法。

调用mapperProxyFactory中的newInstance(SqlSession sqlSession)方法获取一个MapperProxy对象mapperProxy。

根据mapperProxy调用newInstance(MapperProxy<T> mapperProxy),创建出MapperProxy的代理对象并且返回。

简单来说:

先通过SqlSessionFactoryBuilder去读取mybatis的配置文件,然后build一个DefaultSqlSessionFactory。

当我们获取到SqlSessionFactory之后,就可以通过SqlSessionFactory去获取SqlSession对象。

获取到SqlSession对象之后,就可以调用SqlSession中一系列的select…,  insert…, update…, delete…方法来进行CRUD操作。

以上就是个人对Mybatis的源码的分析理解。

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

Mybatis源码分析

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » Mybatis源码分析
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏