mybatis流程图
2023-10-27 16:02:49 0 举报
mybatis框架底层原理(调用流程)
作者其他创作
大纲/内容
创建完SqlSessionFactory后进行映射SqlSession:1、对外提供数据访问sql2、对内提供execute请求转发3、获取映射器getMapper实例4、管理事务5、缓存管理
调用Mapper接口的操作方法(增删改查)
通过动态代理,获取操作的返回结果,根据返回类型得到一个具体的操作对象如果返回对象是list或者其他返回对象,调用SqlSession具体的selectList方法获取其他方法
execute.query
SqlSession的查询方法
Exexute对象
SqlSession的插入方法
getMapper方法会创建动态代理类,参数为Mapper接口类,动态代理后返回的还是代理Mapper接口类,使用返回后的参数对象调用本身的执行增删改查会触发代理执行代理类:MapperProxy方法执行CRUD:MapperMethod
此Mapper接口为上面创建动态代理后的返回对象,调用方法会触发代理类执行代理类:MapperProxy方法执行CRUD:MapperMethod
SqlSessionFactory
最开始的SqlSessionFactory已经获取mapper.xml下的配置(Sql相关)它把这些信息封装到Configuration中,Execute从该对象中获取sql相关信息(Sql,参数等),使用JDBC进行查询,并将查询结果返回
SqlSession
得到结果
读取XML文件,并使用parse解析XML文件
SqlSession的删除方法
使用SqlSessionFactory创建SqlSession,创建时需要指定事务类型和执行器类型,创建哪种执行器(默认简单执行器还有批量和重用执行器),设置提交方式默认为false(不自动提交),事物类型如果配置的是JDBC则使用Connection对象来管理事务,如果配置的是MANAGED则会把事物交给容器管理如JBOSS或者Weblogic
调用SqlSession的getMapper方法(参数为Mapper.java接口类)
execute.update
执行操作调用的是Execute,Execute负责查询,封装了JDBC
getMapper则的是Configuration的getMapper,实际是调用MapperRegistry下的getMapper
mybatis框架底层原理(调用流程)
执行增删改查
解析XML文件下的configuration节点内容:plugins:插件配置environments:数据库配置mappers:mapper.xml(sql相关)配置...等
SqlSession的修改方法
首先通过创建SqlSessionFactory对象,读取XML配置文件信息,获取指定文件下的所有mapper.xml(sql相关)文件并解析获取配置内容,获取后续的SqlSession
创建会话,创建事物和创建Execute执行器
实际执行增删改查方法还是在MapperProxy类实现动态代理执行的,再在里面执行MapperMethod类的execute方法(也就是实际的UPDATE、DELETE、INSERT、SELECT,SELECT中区分单条查询还是多条查询),后续的执行操作都交给execute执行器去执行,SELECT查询使用的是executor.query,其他的使用的是executor.update,执行操作是会判断查询缓存还是走数据库查询,最后把结果返回
MapperRegistry的getMapper方法实际调用是使用MapperProxyFactory的newInstance方法,然而newInstance方法则是使用动态代理(MapperProxy实现具体的代理及实现InvocationHandler类的invoke方法)来实现实际调用的
动态代理执行,调用SqlSession获取的动态代理参数对象执行对应增删改查方法,并获取返回对象结果
SqlSession的增删改查方法

收藏
0 条评论
下一页