mybatis执行dao层操作数据库的流程(使用Druid连接池)

( 1)获取到dao层的动态代理对象org.apache.ibatis.binding.MapperProxy@63f53387,并执行其invoke方法,该方法是入口
( 2)执行org.apache.ibatis.binding.MapperMethod.execute()方法,根据sql语句执行select/update/delete之一
( 3)执行org.mybatis.spring.SqlSessionTemplate.insert()方法
( 4)执行org.mybatis.spring.SqlSessionTemplate中内部类SqlSessionInterceptor的invoke方法, 该invoke方法首先获取session(即连接),执行sql返回结果,关闭session(即连接)
( 5)执行org.apache.ibatis.session.defaults.DefaultSqlSession.insert()方法
( 6)执行org.apache.ibatis.executor.BaseExecutor.getConnection()方法获取connection
( 7)执行com.alibaba.druid.pool.DruidDataSource.getConnection()方法从Druid连接池获取一个connection
( 8)执行com.alibaba.druid.pool.DruidDataSource.takeLast()方法从connection[]数组中取得最后一个连接,并将该数组的最后一个元素置为null
( 9)org.mybatis.spring.SqlSessionTemplate中内部类SqlSessionInterceptor的invoke方法执行完sql拿到返回结果
(10)执行org.mybatis.spring.SqlSessionUtils.closeSqlSession()方法关闭session
(11)执行com.alibaba.druid.pool.DruidPooledConnection.close()方法将connection放回connection[]数组中
(12)执行com.alibaba.druid.pool.DruidDataSource.recycle()方法调整数据库连接池相关参数
(13)dao方法执行结束

你可能感兴趣的:(ibatis,mybatis,连接池,session,connection)