栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

使用myBatis访问数据库原理

使用myBatis访问数据库原理

本文介绍mybatis访问数据库的流程以及其插件原理。

一、myBatis的使用

1、mybatis配置文件如下

2、sql文件

 3、访问数据库代码如下

下面是配置文件解析流程

构建DefaultSqlSessionFactory对象

new SqlSessionFactoryBuilder().build(reader);

使用XMLConfigBuilder进行配置文件解析

解析sql配置文件

XMLMapperBuilder解析sql文件

org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement

       构建以 namespace+”.”+sqlId 为key、MappedStatement为value的map。存储在Configuration对象的mappedStatements中。

创建dao代理工厂

MapperRegistry.addMapper将代理工厂存入knownMappers中(以class对象为key,代理工厂对象为value)

MapperProxyFactory代理工厂创建代理对象的方法

MapperProxy代理执行invoke方法

至此,通过解析配置文件,baseBuilder.configuration对象中已经保存了sql信息、dao接口的代理信息。

下面是sql的执行过程

sessionFactory.openSession()
此方法获取sqlSession对象,包含了前面解析的配置信息以及Executor执行器。其中Executor的代理对象封装了插件逻辑

 

sqlSession.getMapper(IncomeRouterDao.class)
通过dao接口的class对象从knownMappers中获取其代理工厂并创建代理对象

MapperProxy.invoke()
通过代理对象的invoke方法执行sql

 

DefaultSqlSession.selectList()
查询单条/多条数据最终执行都是执行selectList方法
从configuration.mappedStatements获取到statement对象后,使用executor代理对(SimpleExecutor/开启二级缓存CachingExecutor)实际执行sql

 

CachingExecutor.query()
先从缓存获取,缓存没有从db查询。此缓存为mappedStatement(configuration.mappedStatements)级别的缓存,又称二级缓存。此缓存为全局缓存,不同sqlsession会话可共用。

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/279871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号