sharding-jdbc 源码分析 —— sql 解析(三)之查询sql

sharding-jdbc 源码分析 —— sql 解析(三)之查询sql

ID:12913377

大小:332.10 KB

页数:38页

时间:2018-07-19

sharding-jdbc 源码分析 —— sql 解析(三)之查询sql_第1页
sharding-jdbc 源码分析 —— sql 解析(三)之查询sql_第2页
sharding-jdbc 源码分析 —— sql 解析(三)之查询sql_第3页
sharding-jdbc 源码分析 —— sql 解析(三)之查询sql_第4页
sharding-jdbc 源码分析 —— sql 解析(三)之查询sql_第5页
资源描述:

《sharding-jdbc 源码分析 —— sql 解析(三)之查询sql》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、由于每个数据库在遵守SQL语法规范的同时,又有各自独特的语法。因此,在Sharding-JDBC里每个数据库都有自己的SELECT语句的解析器实现方式,当然绝大部分逻辑是相同的。本文主要分享笔者最常用的MySQL查询。查询SQL解析主流程如下://AbstractSelectParser.javapublicfinalSelectStatementparse(){query();parseOrderBy();customizedSelect();appendDerivedColumns();appendDerivedOrderBy()

2、;returnselectStatement;}·#parseOrderBy() :对于MySQL查询语句解析器无效果,因为已经在 #query() 方法里面已经调用 #parseOrderBy(),因此图中省略该方法。·#customizedSelect() :Oracle、SQLServer查询语句解析器重写了该方法,对于MySQL查询解析器是个空方法,进行省略。有兴趣的同学可以单独去研究研究。Sharding-JDBC正在收集使用公司名单:传送门。传送门Sharding-JDBC也会因此,能够覆盖更多的业务场景。传送门登记吧,骚

3、年!传送门最灵活也是最复杂的,希望大家有耐心看完本文。理解查询语句解析,另外三种语句理解起来简直是SOEASY。骗人是小狗(芋道源码)留言,我会逐条认真耐心回复。骗人是小猪OK,不废话啦,开始我们这段痛并快乐的旅途。2.SelectStatement 本节只介绍这些类,方便本文下节分析源码实现大家能知道认识它们 SelectStatement,查询语句解析结果对象。//SelectStatement.javapublicfinalclassSelectStatementextendsAbstractSQLStatement{/***是

4、否行DISTINCT/DISTINCTROW/UNION*/privatebooleandistinct;/***是否查询所有字段,即SELECT**/privatebooleancontainStar;/***最后一个查询项下一个Token的开始位置**@see#items*/privateintselectListLastPosition;/***最后一个分组项下一个Token的开始位置*/privateintgroupByLastPosition;/***查询项*/privatefinalListitem

5、s=newLinkedList<>();/***分组项*/privatefinalListgroupByItems=newLinkedList<>();/***排序项*/privatefinalListorderByItems=newLinkedList<>();/***分页*/privateLimitlimit;}我们对属性按照类型进行归类:·特殊·distinct·查询字段·containStar·items·selectListLastPosition·分组条件·groupByItem

6、s·groupByLastPosition·排序条件·orderByItems·分页条件·limit2.1AbstractSQLStatement增删改查解析结果对象的抽象父类。publicabstractclassAbstractSQLStatementimplementsSQLStatement{/***SQL类型*/privatefinalSQLTypetype;/***表*/privatefinalTablestables=newTables();/***过滤条件。*只有对路由结果有影响的条件,才添加进数组*/privatef

7、inalConditionsconditions=newConditions();/***SQL标记对象*/privatefinalListsqlTokens=newLinkedList<>();}2.2SQLTokenSQLToken,SQL标记对象接口,SQL改写时使用到。下面都是它的实现类:类说明GeneratedKeyToken自增主键标记对象TableToken表标记对象ItemsToken选择项标记对象OffsetToken分页偏移量标记对象OrderByToken排序标记对象RowCountToken

8、分页长度标记对象3.#query()#query(),查询SQL解析。MySQLSELECTSyntax://https://dev.mysql.com/doc/refman/5.7/en/select.htmlSELE

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。