`
ahua186186
  • 浏览: 562018 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

summercool-ddl &Mybatis3.06 总结1-总体框架理解

 
阅读更多
1.summercool-ddl核心类:SqlSessionDaoSupport 和 SqlSessionFactoryBean


(1)SqlSessionDaoSupport 封装了SqlSession(通过动态代理SqlSession来选择数据源的方式实现分库策略),SqlSessionFactoryBean,Map<DataSource, SqlSessionTemplate>。


(2)SqlSessionFactoryBean封装了DataSource,SqlSessionFactory(封装了Configuration(封装环境元素(数据源和事务)、 属性、类型别名、typeHandler、mapper、setting、插件】),SqlSession(主要封装了Configuration对象、Executor对象、是否自动提交)),Map<String, ShardStrategy>(分库逻辑)


2. Mybatis3.06 核心类:Configuration和SqlSessionFactory,SqlSession,Executor

(1)真实干活的类:SqlSessionFactory主要是工作必须是提供获取SqlSession的方法,同时还提供了一个获取Configuration的方法。


(2)真实干活的类:SqlSession类主要封装了Configuration对象、Executor对象、是否自动提交

(3)Configuration对象,其实他就是对xml配置文件的对象映射,封装了:环境元素(数据源和事务)、 属性、类型别名、typeHandler、mapper、setting、插件。

(4)真实干活的类:Executor对象执行SQL语句,可以通过配置插件修改SQL(插件保存在Configuration中,通过configuration.newStatementHandler调用),封装了:Configuration,Transaction(通过getConnection()获取连接)

(5) 真正处理业务逻辑的是StatementHandler(持有核心类MappedStatement,ms又持有DynamicSqlSource,DynamicContext,所有的sql解析,sql路由逻辑,插件增强功能等等都在这里完成。



/**
 * @author Clinton Begin
 */
public class SimpleExecutor extends BaseExecutor {

  public SimpleExecutor(Configuration configuration, Transaction transaction) {
    super(configuration, transaction);
  }

  @Override
  public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {
    Statement stmt = null;
    try {
      Configuration configuration = ms.getConfiguration();
      StatementHandler handler = configuration.newStatementHandler(this, ms, parameter, RowBounds.DEFAULT, null, null);
      stmt = prepareStatement(handler, ms.getStatementLog());
      return handler.update(stmt);
    } finally {
      closeStatement(stmt);
    }
  }

  @Override
  public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
    Statement stmt = null;
    try {
      Configuration configuration = ms.getConfiguration();
      StatementHandler handler = configuration.newStatementHandler(wrapper, ms, parameter, rowBounds, resultHandler, boundSql);
      stmt = prepareStatement(handler, ms.getStatementLog());
      return handler.<E>query(stmt, resultHandler);
    } finally {
      closeStatement(stmt);
    }
  }

  @Override
  public List<BatchResult> doFlushStatements(boolean isRollback) throws SQLException {
    return Collections.emptyList();
  }

  private Statement prepareStatement(StatementHandler handler, Log statementLog) throws SQLException {
    Statement stmt;
    Connection connection = getConnection(statementLog);
    stmt = handler.prepare(connection);
    handler.parameterize(stmt);
    return stmt;
  }

分享到:
评论

相关推荐

    summercool-ddl:自动从code.google.compsummercool-ddl导出

    summercool-ddl Automatically exported from code.google.com/p/summercool-ddl 学习了解使用!

    summercool-ddl:从 code.google.compsummercool-ddl 自动导出

    《Summercool-DDL:基于MyBatis的分库分表框架详解》 在现代的互联网应用中,随着数据量的快速增长,单表存储的数据量往往容易达到瓶颈,从而影响系统的性能和稳定性。为了解决这一问题,分布式数据库和分库分表...

    summercool-hsf:自动从code.google.compsummercool-hsf导出

    总结并开发了如下几个框架: summercool(Web 框架,已经应用于某国内大型网络公司的等重要应用)、summercool-hsf(基于Netty实现的RPC框架,已经应用国内某移动互联网公司)、 summercool-ddl(基于Mybaits的分表...

    summercool-hsf:从 code.google.compsummercool-hsf 自动导出

    1.目前为止性能最高的RPC远程通讯框架 2.也可以做为手机长连接的Server,经测试已经达到了50W以上的性能长连接 (需调整linux内核参数等,笔者会做详细说明) 3.这是笔者开发的第二个框架,因为笔者之前在国内最大的...

    summercool:从 code.google.compsummercool 自动导出

    总结并开发了如下几个框架: summercool( Web框架,已经应用于某国内大型网络公司的等重要应用)、summercool-hsf(基于Netty实现的RPC框架,已经应用国内某移动互联网公司)、summercool-ddl(基于Mybaits的分表分...

    Ibatis之分表分库解决方案

    在实际项目中,`summercool-ddl`可能是一个包含数据库创建脚本的文件,用于在实施分库分表前准备数据库结构。这些脚本可能包含了创建分片表的DDL语句,以及可能的视图和索引,以优化查询性能。 总之,Ibatis的分库...

Global site tag (gtag.js) - Google Analytics