类实现了SqlSessionFactory和SqlSession接口,并且在SqlSessionManager分别有SqlSessionFactory和SqlSession类型的成员变量sqlSessionFactory,sqlSessionProxy,并且SqlSessionManager很多方法中只是对sqlSessionFactory和sqlSessionProxy做了一层代理。
public class SqlSessionManager implements SqlSessionFactory, SqlSession {
private final SqlSessionFactory sqlSessionFactory;
private final SqlSession sqlSessionProxy;
@Override
public SqlSession openSession() {
return sqlSessionFactory.openSession();
}
.
.
.
@Override
public <K, V> Map<K, V> selectMap(String statement, Object parameter, String mapKey, RowBounds rowBounds) {
return sqlSessionProxy.<K, V> selectMap(statement, parameter, mapKey, rowBounds);
}
}
问题
这里是否有必要实现这一层代理?
假设确实有必要设计这一层代理,这里可以给sqlSessionFactory和sqlSessionProxy分别创建一个代理类,为什么要写在一个代理类里面
个人理解
关于问题二,我目前可以理解为,SqlSessionManager是比SqlSessionFactory和SqlSession更高一级的抽象。但是这里为什么需要做这一层代理呢?其实不难发现在很多框架中很多地方都有这种类似的代码,但是一直不明白这样做的一个好处是什么?
我的理解是这个作为Facade模式,用于屏蔽内部的多个子系统或者类.该类提供的功能诸如获取连接,事务管理,以及执行sql等,从多个方面提供了功能支持.
用户在使用mybatis的功能时,只需要关注这个统一的类就好,而不用关心内部细节或者去跟多个功能类去交互.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。