java动态代理---MyBatis之SqlSessionDaoSupport

在使用mybatis时我们一般通过继承SqlSessionDaoSupport然后使用getSqlSession获取数据库连接,进行数据库相关操作。我们查看getSqlSession方法可以看出,这个方法其实是返回了一个SqlSessionTemplate对象。

接着我们进入SqlSessionTemplate的构造器中看看,最终发现最终调用的都是如下构造器。

根据代码我们可以看到,最终生成的是一个sqlSession的动态代理sqlSessionProxy。根据动态代理构造我们可以很容易的看出,最终数据库相关操作都封装在SqlSessionInterceptor的invoke方法中。我们进invoke方法中看看。

在invoke方法中我们可以看到,改代理类并无对原有方法做过多包装。只是封装了相关事物操作。具体执行顺序如下:

1. 获取数据库链接,处理相关sql操作

2. 如果数据库操作有相应事物,则提交事物

3. 若2发生异常则回滚数据库操作,并关闭连接

4. 第四步一定执行,如果数据库链接没有关闭,则关闭数据库链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,341评论 11 349
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,861评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • 昨天晚上,在“梦想之约”的微群里听了企鹅妈妈的分享,受益匪浅。 分享会是由Rita组织的。Rita是我学习写作的导...
    晨曦爱读书阅读 564评论 0 1
  • 1、整体分析。 1、1 构建交易系统,月计划总体完成60%。 执行奶爸,亏损≤10%:欢乐ETF/全志已经执行中,...
    crb8阅读 194评论 0 0