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 Automatically exported from code.google.com/p/summercool-ddl 学习了解使用!
《Summercool-DDL:基于MyBatis的分库分表框架详解》 在现代的互联网应用中,随着数据量的快速增长,单表存储的数据量往往容易达到瓶颈,从而影响系统的性能和稳定性。为了解决这一问题,分布式数据库和分库分表...
总结并开发了如下几个框架: summercool(Web 框架,已经应用于某国内大型网络公司的等重要应用)、summercool-hsf(基于Netty实现的RPC框架,已经应用国内某移动互联网公司)、 summercool-ddl(基于Mybaits的分表...
1.目前为止性能最高的RPC远程通讯框架 2.也可以做为手机长连接的Server,经测试已经达到了50W以上的性能长连接 (需调整linux内核参数等,笔者会做详细说明) 3.这是笔者开发的第二个框架,因为笔者之前在国内最大的...
总结并开发了如下几个框架: summercool( Web框架,已经应用于某国内大型网络公司的等重要应用)、summercool-hsf(基于Netty实现的RPC框架,已经应用国内某移动互联网公司)、summercool-ddl(基于Mybaits的分表分...
在实际项目中,`summercool-ddl`可能是一个包含数据库创建脚本的文件,用于在实施分库分表前准备数据库结构。这些脚本可能包含了创建分片表的DDL语句,以及可能的视图和索引,以优化查询性能。 总之,Ibatis的分库...