当前位置:首页 > 编程笔记 > 正文
已解决

mybatis的简单执行流程-面试用

来自网友在路上 140840提问 提问时间:2023-10-22 05:32:44阅读次数: 40

最佳答案 问答题库408位专家为你答疑解惑

1、Configuration

XMLConfigBuilder调用parse()方法解析Mybatis配置文件,生成Configuration对象
XMLConfigBuilder parser > Configuration

SqlSessionFactory = new DefaultSqlSessionFactory ( config );
session = factory.openSession();
sqlSession.getMapper(UserMapper.class);

通过Session来得到UserMapper.java类的代理对象。
每一个Mapper文件都有一个对应的MapperProxyFactory,为什么需要MapperProxyFactory

2、因为MapperProxyFactory可以用来生成代理对象。

MapperProxyFactory是如何产生代理对象: 内部通过目标类转成MapperProxy,在通过Proxy生成代理对象。
MapperProxy实现了InvocationHandler接口,所以MapperProxy具有拦截功能,

Proxy如何产生对象的

Proxy.newProxyInstance(getClassLoader(), new Class[]{this.mapperInterface}, mapperProxy);

注意第一个参数是类加载器,第二个是代理要实现的接口,第三个参数是InvocationHandler的实例对象。

Proxy把MapperProxy当做InvocationHandler,Mapper当做接口来生成代理类。最终代理类会实现UserMapper接口,并且被调用时,会被InvocationHandler拦截也就是被MapperProxy拦截。

当调用方法,会被MapperProxy的invoke方法拦截,invoke会做下面操作

通过方法名Method查询得到MapperMethodInvoker对象,MapperMethodInvoker是做什么

3、MapperMethod

MapperMethod主要包含下面2个东西

private final MapperMethod.SqlCommand command;
private final MapperMethod.MethodSignature method;public MapperMethod(Class<?> mapperInterface, Method method, Configuration config) {this.command = new MapperMethod.SqlCommand(config, mapperInterface, method);this.method = new MapperMethod.MethodSignature(config, mapperInterface, method);
}

SqlCommand和MethodSignature干嘛用的。
1、SqlCommand一个内部类 封装了SQL标签的类型insert update delete select
2、MethodSignature一个内部类 封装了方法的参数信息 返回类型信息等

MapperMethod有个execute,就是开始执行sql的操作.在execute里面,通过类型找到事insert还是update,在通过返回值类型找具体方法,处理类型
在通过类+方法名当做ID去Mapper.xml里面找对应的sql执行语句。

关于MapperMethod可以看这个文章:《MapperMethod》

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"mybatis的简单执行流程-面试用":http://eshow365.cn/6-21362-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!