0
点赞
收藏
分享

微信扫一扫

聊聊ShardingSphere的两个Statement

聊聊ShardingSphere的两个Statement

本篇文章源码基于4.0.1版本

前几篇文章我们讲了ShardingSphere的路由、重写等操作,这篇文章我们讲一下它在SQL处理后的执行的时候可能用到了两个重要的类,ShardingStatement和ShardingPreparedStatement

ShardingStatement

从 ShardingStatement的 executeQuery()方法的可以看出进行查询的具体流程:

  1. 先清除先前的语句执行器
  2. 进行分片
  3. 初始化语句执行器
  4. 利用合并引擎工厂类创建合并引擎对象
  5. 获取结果集

在创建合并引擎对象的时候,需要用到执行器的执行查询的结果,我们看一下执行查询的流程

public List<QueryResult> executeQuery() throws SQLException {
        final boolean isExceptionThrown = ExecutorExceptionHandler.isExceptionThrown();
        SQLExecuteCallback<QueryResult> executeCallback = new SQLExecuteCallback<QueryResult>(getDatabaseType(), isExceptionThrown) {
            
            @Override
            protected QueryResult executeSQL(final String sql, final Statement statement, final ConnectionMode connectionMode) throws SQLException {
                return getQueryResult(sql, statement, connectionMode);
            }
        };
        return executeCallback(executeCallback);
    }
  1. 创建SQLExecuteCallback对象,创建的时候会调用getQueryResult()方法获取查询结果,会根据连接模式选择不同的执行方式
  2. 执行回调方法,这个方法中调用SQL执行模板类SQLExecuteTemplate的executeGroup()方法,SQLExecuteTemplate可以和JdbcTemplate对比着学习,这个方法中又直接调用了ShardingExecuteEngine的groupExecute()方法,分为串行执行serialExecute()方法和并行执行parallelExecute()方法,无论串行还是并行,都会使用当前线程来执行一次模式,然后再进行串行或并行处理

内存限制模式

对数据库的连接数量不做限制,创建多个连接,并行执行,对应创建MemoryQueryResult对象,构造方法中调用了getRows()方法获取全部数据行后放入内存中

连接限制模式

只会创建一个连接,串行执行查询,对应创建StreamQueryResult流加载查询结果对象,

ShardingPreparedStatement

ShardingPreparedStatement的 executeQuery()方法和ShardingStatement的方法基本一致,他们两个关系和PreparedStatement 与Statement的关系差不多,前者可以进行参数的设置,后者不支持

总结

这篇文章我们说了一下ShardingSphere的ShardingStatement和ShardingPreparedStatement,ShardingPreparedStatement的功能包含了ShardingSphere,它还可以设置参数,和我们使用JDBC操作数据库的时候PreparedStatement 与Statement差不多,可以比较着学习。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
  3. 有不当之处欢迎批评指正。
举报

相关推荐

0 条评论