javascript代码实例教程-JSqlParser系列之二代码结构(原)

发布时间:2019-01-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-JSqlParser系列之二代码结构(原)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。  JSQLPaser将所有的SQL语句抽象为Statement,statement表示对数据库的一个操作。

 

 

package net.sf.jsqlparser.statement;

 

/**

 * An operation on the db (SELECT, UPDATE ecc.)

 */

public interface Statement {

 

    void accept(StatementVisITor statementVisitor);

}

 

        常见的Statement有:Select,Create,Drop,Insert,Delete等,它们作为Statement实现类,均实现accept方法。这是Visitor模式的典型应用,贯穿JSqlParser解析SQL语句的每个角落。这里你只需要知道Statement对应StatementVisitor。如果要针对SQL语句进行定制化处理,你只需实现StatementVisitor接口即可。

 

       以查询语句(Select)为例,下面是Select类的方法截图:

 

   

 

可以看到,Select对象有两个重要的成员:SelectBody,List<WithItem>,其中WithItem对应SQL语句的with关键字,并不多见。可见常用Select语句的重点在SelectBody。SelectBody是一个接口,定义如下:

 

package net.sf.jsqlparser.statement.select;

 

public interface SelectBody {

 

    void accept(SelectVisitor selectVisitor);

}

又是一个Visitor,只不过这里换成了SelectVisitor。即针对Select语句的访问者。如果想定制化解析Select语句,可以实现该接口。

 

Select语句进一步细分,大致可发表示如下:

 

select    SelectItem   From   FromItem   where   ExPression

 

其中SelectItem表示要选择的内容:

 

 

/**

 * Anything between "SELECT" and "FROM"<br>

 * (that is, any column or exPRession etc to be retrieved with the query)

 */

public interface SelectItem {

 

    void accept(SelectItemVisitor selectItemVisitor);

}

 

FromItem表示数据来(表或者嵌入选择语句

 

 

package net.sf.jsqlparser.statement.select;

 

import net.sf.jsqlparser.expression.Alias;

 

/**

 * An item in a "SELECT [...] FROM item1" statement. (for example a table or a

 * sub-select)

 */

public interface FromItem {

 

    void accept(FromItemVisitor fromItemVisitor);

 

    Alias getAlias();

 

    void setAlias(Alias alias);

 

    Pivot getPivot();

 

    void setPivot(Pivot pivot);

 

}

 

可以看到,SelectItem解析的时候会用到SeletItemVisitor,FromItem解析的时候会用到FromItemVisitor,模式都是相同的。

Expression稍微复杂一些,下面单独介绍。

 

表达式(expression)

 

SQL解析过程中, 条件的解析最为复杂。JSqlParser把where 与order by 之间的条件表达式抽象有Exception。

 

package net.sf.jsqlparser.expression;

 

public interface Expression {

 

    void accept(ExpressionVisitor expressionVisitor);

}

哈哈,又看到一个ExpressionVisitor,是不是觉得JSqlParser的思路还蛮简洁的。

Expression进一步细分成好多种,常见的有:

 

1、条件表达式

 

如:AndExpression(and),OrExpression(or)

 

2、关系表达式

 

如:EqualsTo(=),MinorThan(<),GreaterThan(>),……

 

3、算表达式

 

如:Addition(+),SuBTraction(-),Multiplication(*),Division(/),……

 

4、列表达式

 

如:Column

 

5、case表达式

 

如:CaseExpression

 

6、值表达式

 

如:StringValue,DateValue,LongValue,DoubleValue,……

 

7、函数表达式

 

如:Function

 

8、参数表达式

 

如:JdbcParameter,JdbcNameParameter,……

 

如果要定制ExpressionVisitor,针对上面不同的表达式,应该给出相应的处理。

 

 

访问者(Visitor)

 

上面已经提到,常用的Visitor有StatementVisitor,SelectVisitor,ExpressionVisitor,SelectItemVisitor,FromItemVisitor等,定制化解析具体某一块SQL语句时,需要定制相关的Visitor。

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-JSqlParser系列之二代码结构(原)全部内容,希望文章能够帮你解决javascript代码实例教程-JSqlParser系列之二代码结构(原)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。