Mybatis学习随笔
Mybatis的宏观架构
学习一个框架就要先了解它的宏观架构
我将Mybatis总结为一个主类,5个接口
一个主类:Conifguration。作用:1.处理静态的xml标签(其中xml包括mybatis-config.xml与Mapper下面的*.xml),将xml中的标签以及内容封装到configuration类中,mappper中的xml标签会封装到MapperedStatement中,每一个<select这种标签都会封装成一个MappedStatement。最后以Map的形式存放在Configuration中,map的key为namespace+id作为key。
5个接口:Executor(主要交互接口,有三种(SimpleExecutor、ReuseExecutor、BatchExecutor)),StatementHandler(增删改的接口,与数据库进行交互),ParameterHandler(处理参数相关),ResultSetHandler(处理结果集的接口),TypeHandler(处理数据类型的接口,有很多实现类,处理不同数据类型)
Configuration类 是怎么将xml封装进类中的?
SqlSession 如何与几个Handler联系起来的呢?
Mybatis中的代理设计模式在哪里体现了?
sqlSession.getMapper(User.class)
其中通过MapperProxy 和 MapperProxyFactory 来动态代理生成代理对象。
MapperProxy实现了InvocationHandler,里面通过sqlSession调用增删改查的方法执行动态代理类的方法。将MapperProxy实现类传入MapperProxyFactory,通过JDK的动态代理---> Proxy.newProxyInstance(),生成代理对象。代理类MapperProxy的invoke方法调用了sqlSession的update方法,底层调用executor的update方法,再底层调用了StatementHandler的update方法,再底层调用了statement的execute方法