大家都晓得MyBatis是一个很好的持久层框架,可以方便地对数据库进行增删改查操作,那么它究竟是什么运行原理呢?
我粗略的看了一下源码
MyBatis可以分为两大部分,
一、首先是解析mybatis配置文件,如下图:
第一部分的流程图:
现在一步一步分析上图
从build开始debug进入源码到下图:
从build()方法中可以看出,SqlSessionFactoryBuilder对象对mybatis-config.xml文件用XMLConfigBuilder进行解析,并将他封装在Configuration对象中,然后再封装在DefaultSqlSessionFactory对象中
DefaultSqlSessionFactory的openSession方法debug进入部分:
根据解析出的configuration获取environment、Transaction(事务)、Executor(执行器)
将它们封装在DefaultSqlSession的对象中
二、对数据库中相应的表进行增删查改
这里我只举例了查的案例
debug进入DefaultSession的getMapper()方法
到这里可以发现这里创建了一个mapper代理的工厂,将StudentMapper利用反射的进行动态代理,StudentMapper引用的其实是一个代理对象,增删改查主要是通过代理对象来实现的
总结:mybatis对其配置文件进行解析,解析完后就得到了要连接数据库时的相关配置信息,以及相应的mapper.xml的信息
当创建Session对象时对数据库进行连接,并且创建了代理对象,用来执行CURD