Mybatis工作原理简介
所属分类 mybatis
浏览量 1242
SqlSessionFactoryBuilder 读取配置 mybatis-config.xml
springboot里配置
mybatis.mapper-locations=classpath:mapper/*.xml
build SqlSessionFactory
SqlSessionFactory openSession() 返回 SqlSession
SqlSession实例获取Mapper对象并运行
SqlSession通过StatementID找到对应的MappedStatement对象
通过Executor 将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象
MappedStatement 结果映射
SqlSessionFactory
SqlSession
Executor
StatementHandler
ParameterHandler
ResultHandler
TypeHandler
执行器 Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
参数处理器 ParameterHandler (getParameterObject, setParameters)
结果处理器 ResultSetHandler (handleResultSets, handleOutputParameters)
sql查询更新处理器 StatementHandler (prepare, parameterize, batch, update, query)
StatementHandler 使用ParameterHandler与ResultHandler分别进行参数绑定与结果处理
ParameterHandler与ResultHandler都使用TypeHandler进行映射
SqlSessionFactory --> SqlSession --> Executor -->
StatementHandler --> (ParameterHandler ResultHandler) --> TypeHandler
// 读取mybatis-config.xml文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建Session实例
SqlSession session = sqlSessionFactory.openSession();
// 数据库操作方法一
Person person = session.selectOne("com.dyyx.mapper.PersonMapper.selectPersonById", 1);
// 数据库操作方法二:获取mapper接口代理对象
PersonMapper personMapper = session.getMapper(PersonMapper.class);
Person person2 = personMapper.selectPersonById(1);
// 提交事务
session.commit();
// 关闭Session
session.close();
原理图
https://gitee.com/dyyx/work2024/tree/master/docs/mybatis/images/
mybatis001.webp mybatis002.webp mybatis003.webp
上一篇
下一篇
两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D5E6F
java面试题合集
单例模式几种实现方式
springboot集成mybatis
spring-boot-starter原理
top使用技巧