MyBatis的解析和运行原理
MyBatis的运行分为两部分,第一部分是读取配置文件缓存到Configuration对象,用以创建SqlSessionFactory,第二部分是SqlSession的执行过程(反射技术和动态代理技术)。
在DAO层的Mapper仅仅是一个接口,而不是一个包含逻辑的实现类。接口是无法实例化并且执行的,所以这就用到了动态代理结束,通过DEBUG的过程来查看Mapper的具体细节。
反射调用的最大好处是配置型大大提高,就如同Spring IOC容器一样,我们可以给很多配置参数,使得Java应用程序能够顺利运行起来,大大提高了Java的灵活性和可配置性,降低模块之间的耦合。
动态代理的方法主要有JDK动态代理(此种代理方式基于接口的代理,被代理类必须实现了接口);CGLIB动态代理(此种代理方式可以解决被代理类没有实现接口)。
构建SqlSessionFactory过程
第一步:通过org.apache.ibatisbuilder.xml.XMLConfigBuilder解析配置的XML文件,独处配置参数,并将读取的数据存入这个org.apache.ibatisbuilder.session.Configuration类中。
第二步:使用Configuration对象去创建SqlSessionFactory。
SqlSession运行过程