java动态代理---MyBatis之SqlSessionDaoSupport

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

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

java动态代理---MyBatis之SqlSessionDaoSupport_第1张图片

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

java动态代理---MyBatis之SqlSessionDaoSupport_第2张图片

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

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

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

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

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

你可能感兴趣的:(java动态代理---MyBatis之SqlSessionDaoSupport)