Mybatis工作原理

Mybatis执行流程

获取配置文件的文件流–Resources。

获取配置文件

实例化SqlSessionFactoryBuilder构建器

实例化SqlSessionFactoryBuilder构建器

实例化SqlSessionFactory

  • 调用build,实例化XMLConfigBuilder 解析配置文件
    XMLConfiguration解析配置文件

  • 根据传入的inputStream解析Configuration对象
    Configuration

创建SqlSession

开启SqlSession会话

获取Mapper映射

  • Mapper接口的包路径名-------映射文件的namespace。
  • Mapper接口的方法名----------映射文件中Mapper的Statement的Id值。
  • Mapper接口没有实现类,当调用接口方法时,接口全包名+方法名拼接作为key值,可定位一个唯一的MapperStatement
  • Mapper中方法不能重载,因为需要接口全名+方法名来保存和寻找执行策略。
  • 工作原理:JDK动态代理,拦截接口方法执行MapperStatement代表的sql,然后将结果返回。

采用HashMap存放mapper。
MapperRegistry

执行CRUD,结果封装。

SQL执行结果如何封装
- 根据标签,逐一对照数据库列名与对象属性名之间映射关系。
- SQL的别名功能,将别名书写到对象属性名。
- 有了列名与属性名映射关系后,Mybatis通过反射创建对象,并给对象的属性赋值,找不到映射关系的属性,无法赋值。

调用executor
executor内部判断SQL类型,对结果进行封装
executor内部

SqlSessionFactoryBuilder生命周期

一旦创建SqlSessionFactory后,SqlSessionFactoryBuilder就不再需要。

//读取资源配置类
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
//由文件流生成SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

SqlSessionFactory

  • 生命周期:一旦创建,它会一直存在。
    适合单例模式或静态单例模式。
  • 作用域:整个应用程序。

SqlSession

  • 生命周期:创建会话开始到数据操作结束关闭。
  • 作用域:请求方法内,用完就关。
  • 线程不安全的。
    在源代码中说明线程不安全
    获取SqlSession,核心的执行器executor
    DefaultSqlSessionFactory 获取SqlSession方法
    跟着执行器进入doUpdate方法。执行SQL语句需要创建Statement
    创建Statement
    通过Connection创建prepareStatement
    获取Connection
    通过传入参数transaction获取Connection
    通过传入的transaction获取Connection
    最后进入JdbcTransaction类,只能Connection为空时才再次创建,
    获取Connection
    可以看到一次SqlSession的执行最终是通过是通过事务获取了连接,而一个session中只能有一个事务,一个事务又只能有一个连接,所以一个session中只有一个connection。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值