搜索
java - MyBatis中SqlSessionManager设计疑问
天蓬老师
天蓬老师 2017-04-17 14:49:40
[Java讨论组]

前提:

SqlSessionManager类实现了SqlSessionFactorySqlSession接口,并且在SqlSessionManager分别有SqlSessionFactorySqlSession类型的成员变量sqlSessionFactory,sqlSessionProxy,并且SqlSessionManager很多方法中只是对sqlSessionFactorysqlSessionProxy做了一层代理。

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);
  }
  .
  .
  .
 }

问题

  • 这里是否有必要实现这一层代理?

  • 假设确实有必要设计这一层代理,这里可以给sqlSessionFactorysqlSessionProxy分别创建一个代理类,为什么要写在一个代理类里面

个人理解

关于问题二,我目前可以理解为,SqlSessionManager是比SqlSessionFactorySqlSession更高一级的抽象。但是这里为什么需要做这一层代理呢?其实不难发现在很多框架中很多地方都有这种类似的代码,但是一直不明白这样做的一个好处是什么?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
怪我咯

我的理解是这个作为Facade模式,用于屏蔽内部的多个子系统或者类.该类提供的功能诸如获取连接,事务管理,以及执行sql等,从多个方面提供了功能支持.
用户在使用mybatis的功能时,只需要关注这个统一的类就好,而不用关心内部细节或者去跟多个功能类去交互.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号