MyBatis 框架的自定义——xml注解底层总结

简述

  在上两节的学习里,我们手撕代码硬刚底层,把mybatis的底层类简易地设计出来了,核心过程不外乎下图。

  然后我们在此图的基础上,缺什么就设计什么,写出了如下的类和接口。

  下面我们来一步一步分析MyBatis底层是怎么跑的。

配置文件的信息

  首先来看我们的配置xml文档,SqlMapConfig.xml存的是连接数据库的四个信息,以及指定映射配置文件的位置(使用xml和注解会有不同)

  IUserDao.xml是dao接口的配置xml,里面有方法的id和返回类型,以及我们的sql语句。

流程

  •首先通过SqlMapConfig.xml读取配置信息,通过Resources类获取SqlMapConfig.xml的输入流

  •然后我们实例化一个SqlSessionFactoryBuilder类,通过build方法创建一个工厂,输入参数为in

 

  •build方法会通过通过in参数和XMLConfigBuilder,构建一个Configuration类,Configuration类包含四个驱动数据和一个Map,key由dao的全限定类名和方法名组成,value为一个mapper类,其中包含sql的查询语句和实体类的全限定类名

 

 

  •然后build方法会返回SqlSessionFactory的一个实现类,参数为上面构建的Configuration

  •SqlSessionFactory的实现类会接受cfg并通过SqlSession的实现类生产一个SqlSession对象

  •SqlSession在构造时会接收SqlSessionFactory的cfg并通过工具类DataSourceUtil获得connection

  •SqlSession有两个方法一个是创建代理对象,一个是释放资源。创建代理对象使用类Proxy,返回对象为要代理的类的对象,此处需要注意第一二个参数直接用被代理对象的类加载器和接口就行,需要做文章的是第三个参数——如何代理,我们用一个MapperProxy类作为如何代理的参数,MapperProxy类里会调用工具类执行查询所有。释放资源就把connection給close掉就行。

 

  关于xml文档的解析技术和一些工具类的操作我们不需要细致研究,因为我们研究的是MyBatis的底层。至此,MyBatis使用xml文档的底层被我们一步步手撕成功了

 

  

 

 

 

 

 

 

  这是一个考验,来自过去的考验,人的成长,就是战胜自己不成熟的过去。——狄阿波罗《JOJO奇妙冒险》

  2020/8/13 13:26:54 

  

 

posted @ 2020-08-13 13:31  艾尔夏尔-Layton  阅读(268)  评论(0编辑  收藏  举报