首页 > 其他 > 详细

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

时间:2020-08-13 14:17:20      阅读:58      评论:0      收藏:0      [点我收藏+]

简述

  在上两节的学习里,我们手撕代码硬刚底层,把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 

  

 

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

原文:https://www.cnblogs.com/qq2210446939/p/13488074.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!