DefaultSqlSessionFactory和SqlSessionManager两个都有继承
SqlSessionFactory,不同的是SqlSessionManager还继承了
SqlSession,如下图:
SqlSessionManager实现了SqlSessionFactory接口,又封装了 DefaultSqlSessionFactory。
使用的是java的代理模式。
两者的区别主要就是
SqlSessionManager 实现了Session接口。意味着,SqlSessionManager集成了 sqlSessionFactory和session 的功能。通过SqlSessionManager,开发者可以不在理会SqlSessionFacotry的存在,直接面向Session编程。
SqlSessionManager 内部提供了一个sqlSessionProxy,这个sqlSessionProxy提供了所有Session接口的实现,而实现中正是使用了上面提到的本地线程保存的session实例。
这样,在同一个线程实现不同的sql操作,可以复用本地线程session,避免了DefaultSqlSessionFactory实现的每一个sql操作都要创建新的session实例。