Mybatis学习随笔

123 阅读1分钟

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方法

Mybatis中的动态代理对象在哪里,如果要自己实现一个接口的实现类怎么做?