mybatis流程

JDBC

1
2
3
4
5
6
7
8
9
10
st=>start: 开始
op1=>operation: 加载JDBC驱动
op2=>operation: 建立并获取数据库连接
op3=>operation: 创建 JDBC Statements 对象
op4=>operation: 设置SQL语句的传入参数
op5=>operation: 执行SQL语句并获得查询结果
op6=>operation: 对查询结果进行转换处理并将处理结果返回
op7=>operation: 释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)
e=>end
st->op1->op2->op3->op4->op5->op6->op7->e

mybatis

1
2
3
4
5
6
7
8
9
Title:java使用mybatis框架从数据库获取数据

client->mybatis: 调用
mybatis->jdbc:调用
jdbc->mysql服务器:连接(jdbc-mysql)
mysql服务器-->jdbc:返回
jdbc-->mybatis:返回
mybatis-->client:返回

ORM框架实现

1
2
3
4
5
6
7
8
9
10
11
Title:mybatis初始化,创建configuration对象,提供sqlSession

client->client:获取配置文件inputStream流
client->sqlSessionFactoryBuilder:build(inputStream)
sqlSessionFactoryBuilder->XMLConfigBuilder:new XMLConfigBuilder(inputStream)
XMLConfigBuilder->XMLConfigBuilder:new Configuration()
sqlSessionFactoryBuilder->XMLConfigBuilder:解析配置文件
XMLConfigBuilder-->>sqlSessionFactoryBuilder:返回Configuration对象
sqlSessionFactoryBuilder->sqlSessionFactoryBuilder:build(Configuration)
sqlSessionFactoryBuilder-->>client:返回new DefaultSqlSessionFactory(config)
client->client:使用sqlSessionFactory
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

Title:Configuration对象初始化(细化)

sqlSessionFactoryBuilder->XMLConfigBuilder:new XMLConfigBuilder(inputStream)
XMLConfigBuilder->XPathParser:new XPathParser()
XPathParser->XMLMapperEntityResolver:new XMLMapperEntityResolver()
XPathParser->XPathParser:设置document、entityResolver
XPathParser->XPath:XPathFactory.newXPath()
XMLConfigBuilder->XMLConfigBuilder:new Configuration(),设置解析器为XPathParser
sqlSessionFactoryBuilder->XMLConfigBuilder:解析配置文件
XMLConfigBuilder-->>XPathParser:evalNode("/configuration")
XPathParser-->>XPath:找到configuration的XNode
XMLConfigBuilder-->>Configuration:设置变量属性(properties)
XMLConfigBuilder-->>Configuration:增加类型与别名的关系(typeAliases)(HashMap<String, Class<?>>)
XMLConfigBuilder-->>Configuration:增加拦截器(plugins)(ArrayList<Interceptor>())
XMLConfigBuilder-->>Configuration:设置对象工厂(ObjectFactory)
XMLConfigBuilder-->>Configuration:设置对象包装工厂(ObjectWrapperFactory)
XMLConfigBuilder-->>Configuration:设置反射工厂(ReflectorFactory)
XMLConfigBuilder-->>Configuration:设置属性的设置(settings)
XMLConfigBuilder-->>Configuration:设置环境(environments)(事务管理器、数据源)
XMLConfigBuilder-->>Configuration:设置数据库(databaseIdProvider)
XMLConfigBuilder-->>Configuration:设置类型处理器(java_type类型与jdbc_type类型)
XMLConfigBuilder-->>Configuration:设置mapper类与对应的代理类(HashMap<Class<?>, MapperProxyFactory<?>>())
XMLConfigBuilder->sqlSessionFactoryBuilder:返回Configuration对象

数据源与连接池实现

mybatis实现带连接池的数据源,但是现在项目都用其他第三方的数据源,但是看一看还是有帮助的。

事务管理机制

提供事务管理机制,可以看看,一般情况使用JdbcTransaction.

一级缓存

使用的本地缓存,用hashMap实现,本地缓存根据sqlSession的生命周期,任何在这个sqlSession中执行update(update、delete、insert),都会清空。

二级缓存

application级别的缓存,就是在执行前查看缓存中是否有,如果有返回缓存。现在已经不经常使用application级别的缓存了,不容易分布式化。


mybatis流程
http://hanqichuan.com/2018/11/02/mybatis/mybatis流程/
作者
韩启川
发布于
2018年11月2日
许可协议