脚本宝典收集整理的这篇文章主要介绍了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);
}
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,请注明来意。