首页  

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使用技巧