Mybatis操作主体流程

简介: 完整的时序图可以打开我的云笔记进行查看,对浏览器查看比例进行缩放为250%即可1 Mybatis操作主体流程定位配置文件的位置构建sessionFactory获取数据库操作会话建立数据库连接并执行数据库操作1.1 定位配置文件位置使用org.apache.ibatis.io.Resources.getResourceAsReader(String)

完整的时序图可以打开我的云笔记进行查看,对浏览器查看比例进行缩放为250%即可

1 Mybatis操作主体流程

  • 定位配置文件的位置
  • 构建sessionFactory
  • 获取数据库操作会话
  • 建立数据库连接并执行数据库操作

1.1 定位配置文件位置

使用org.apache.ibatis.io.Resources.getResourceAsReader(String)定位mybatis配置文件的位置,获得文件的输入流。

Created with Raphaël 2.1.0ReaderReaderResourcesResourcesInputStreamReaderInputStreamReaderInputStreamInputStreamClassLoaderWrapperClassLoaderWrapperClassLoaderClassLoadergetResourceAsReader()getResourceAsReader()''getResourceAsStream()getResourceAsStream()getResourceAsStream()''getResourceAsReadernew InputStreamReader()

1.2构建SqlSessionFactory

构建SqlSessionFactory的时序图,使用SqlSessionFactoryBuilder创建SqlSessionFactory对象

Created with Raphaël 2.1.0SqlSessionFactoryBuilderSqlSessionFactoryBuilderXMLConfigBuilderXMLConfigBuilderXPathParserXPathParserDocumentBuilderDocumentBuilderDOMParserDOMParserDocumentDocumentConfigurationConfigurationSqlSessionFactorySqlSessionFactorybuild(reader)XMLConfigBuilder(XPathParser)createDocument()parse()getDocument()new XPathParser()new XMLConfigBuilder()parse()parseConfiguration()build(Configuration)

根据时序图可以看得出,创建sessionFactory需要

  • 将读入的配置文件流解析为Document对象
  • 将Document对象解析为Configuration对象
  • 使用Configuration对象,通过build()方法完成对SqlSessionFactory对象的创建。

1.3 获取数据库操作的会话

Created with Raphaël 2.1.0SqlSessionFactorySqlSessionFactoryDefaultSqlSessionFactoryDefaultSqlSessionFactorySqlSessionSqlSessionopenSession()openSessionFromDataSource()new DefaultSqlSession()

1.4 获取接口实例

Created with Raphaël 2.1.0SqlSessionSqlSessionDefaultSqlSessionDefaultSqlSessionConfigurationConfigurationMapperRegistryMapperRegistryProxyProxyUserMapperUserMappergetMapper()getMapper()getMapper()newInstance()Proxy.newProxyInstance()
Created with Raphaël 2.1.0UserMapperUserMapperMapperProxyMapperProxyMapperMethodMapperMethodDefaultSqlSessionDefaultSqlSessionCachingExecutorCachingExecutorSimpleExecutorSimpleExecutorBaseExecutorBaseExecutorPreparedStatementHandlerPreparedStatementHandlerPreparedStatementPreparedStatementDefaultResultSetHandlerDefaultResultSetHandlergetUserById()execute()selectOne()selectList()query()query()queryFromDatabase()doQuery()prepareStatement()getConnection()prepare()query()execute()handleResultSets()''

在执行具体的
org.apache.ibatis.executor.SimpleExecutor.prepareStatement(StatementHandler, Log)处连接数据库,检查是否能连接成功

数据库连接时序图

Created with Raphaël 2.1.0SimpleExecutorSimpleExecutorBaseExecutorBaseExecutorJdbcTransactionJdbcTransactionDataSourceDataSourceUnpooledDataSourceUnpooledDataSourceDriverManagerDriverManagerDriverInfoDriverInfogetConnection()getConnection()getConnection()openConnection()getConnection()popConnection()new PooledConnection()doGetConnection()getConnection()connect()newInstance()''
相关文章
|
4月前
|
XML Java 数据库连接
【MyBatis】MyBatis操作数据库(一)
【MyBatis】MyBatis操作数据库(一)
44 1
|
4月前
|
XML Java 数据库连接
如何使用 MyBatis 来进行增、删、改、查操作
如何使用 MyBatis 来进行增、删、改、查操作
86 2
|
4月前
|
SQL 存储 Java
基于MyBatis的增删改查操作
基于MyBatis的增删改查操作
38 1
|
4月前
|
缓存 Java 数据库连接
我们后端程序员不是操作MyBatis的CRUD Boy
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们接着新的一篇Java进阶指南。为啥都戏称后端是CRUD Boy?难道就因为天天怼着数据库CRUD吗?要我说,是这个岗位的位置要的就是你CRUD,你不得不CRUD。哪有公司天天能给你搭建高并发、高可用、大数据框架的活呢,一条业务线总要成长吧,慢慢成熟了就要装修工来缝缝补补、美化美化,也就是CRUD的活。不能妄自菲薄CRUD Boy,我们是后端工程师。今天来指南下操作数据库之MyBatis框架。
115 3
我们后端程序员不是操作MyBatis的CRUD Boy
|
3月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
3月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
4月前
|
Java 数据库连接 数据库
Spring日志完结篇,MyBatis操作数据库(入门)
Spring日志完结篇,MyBatis操作数据库(入门)
|
5月前
|
XML Java 数据库连接
利用MyBatis框架操作数据库2
利用MyBatis框架操作数据库
40 2
|
5月前
|
Java 数据库连接 测试技术
利用MyBatis框架操作数据库1
利用MyBatis框架操作数据库
45 1
|
4月前
|
SQL Java 数据库连接
【MyBatis】深入解析MyBatis:高效操作数据库技术详解
【MyBatis】深入解析MyBatis:高效操作数据库技术详解
42 0