Mybatis之门面会话(三)

Mybatis之门面会话(三)

一、前言:

​ mybatis框架有四大步骤,分别为接口代理、门面会话、执行器、jdbc处理器,前面提及Executor执行器,放在前面是因为它是主要成员,本文将针对门面会话进行展开.

二、门面会话

  • 为啥叫门面会话,为啥不叫装饰会话?

    avatar

    look this!

    张三:SqlSessionFactory为啥要弄这么多方法了,最后都是生成一个sql会话,一个方法不就好了

    李四:是啊,这不写起来更麻烦了嘛,都冗余了

    可不是这样的,这是构造方法重载呀!

    avatar

    所有的方法实现都会指向于openSessionFromDataSource(从数据源中打开会话),接着往下瞧.

    avatar

    张三:看到这里我终于知道我的事务是怎么回滚的了

    李四:我也知道了,所有sql语句执行由Executor执行器处理,开启会话的时候将事务绑定给了执行器,所以我执行出错的语句就由它回滚了

    真聪明啊,2位大佬,没错就是这样,我们来一步步解析看看

    • 首先是我们的获取事务工厂

    avatar

    • 当前环境中没有事务工厂我就生成一个,有就去当前这个,是不是特别简单,没错就是这么简单

    接着看看是如何获取事务

    avatar
    直接生成一个jdbc的事务,要不要这么简单,啊sir,惊呆了吧小伙伴(小提示:当前这个事务是mybatis对jdbc事务的封装)

    • 接着看看是如何生成的执行器

    avatar

    avatar

    关于2次判断可是个小坑,不知道的还以为是代码冗余了,并不是哦,这里还做了拦截功能,以供我们做插件扩张.厉害啊sir

    • 最后创建会话

    avatar

  • 门面会话就这样吗?No,SqlSession登场!

    avatar

    渍渍渍,弄这么多查询方法

    张三:我知道,我知道,这是方法重载

    害,张三呀张三,你看看方法这么多查询方法,不是说单个方法,仔细看看,这是我们的 “门面模式” 呀,你这说得一点排面都莫得.让我们来了解一下什么是门面模式.

    门面模式:是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用(=>此话摘取于百度百科).

    张三:我知道它的调用肯定是由Executor执行的

    哦呦!有点东西哦,和小伙伴说说为什么呢?

    张三:前面打开会话的时候,生成了Executor实例,sql语句由Executor执行,没错!肯定就是它了

    你可真机智呀,下面让我们来看看具体实现吧

    avatar

三、总结

​ 门面会话中的坑还是有点的,比如那2行代码,不知道的以为作者写的时候是不是睡着了,里面的设计思想可真是精彩呀!把所有的东西融入到会话中,会话的门面模式调用,简直就是精彩!

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信