SQL剖析工具JSQLParser

[复制链接]
发表于 2025-5-24 14:33:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、引言

JSQLParser(GitHub:https://github.com/JSQLParser/JSqlParser)是一个Java语言的SQL语句剖析工具,功能十分强大,它可以将SQL语句剖析成为Java类的层次结构,还支持改写SQL,常见的持久层框架MyBatis-Plus就采用它作为SQL剖析工具来实现某些功能。
二、JSQLParser常见类

2.1 Class Diagram


2.2 Statement

可以理解为能够表示任意一种SQL语句的对象,Select、Update、Delete、Insert都是它的子类,例如以下用法:
  1. Statement statement = JsqlParserGlobal.parse(sql);
  2. if (statement instanceof Insert) {
  3.     this.processInsert((Insert) statement, index, sql, obj);
  4. } else if (statement instanceof Select) {
  5.     this.processSelect((Select) statement, index, sql, obj);
  6. } else if (statement instanceof Update) {
  7.     this.processUpdate((Update) statement, index, sql, obj);
  8. } else if (statement instanceof Delete) {
  9.     this.processDelete((Delete) statement, index, sql, obj);
  10. }
复制代码
2.3 Expression

是JSqlParser库中的一个核心接口,是用于表示SQL语句中的各种表达式的基类接口,通过调用对象的.toString()方法,就能看到具体的语句结构。
例如:

  • 根本值

    • LongValue(整数值)、StringValue(字符串值)、DoubleValue(浮点数值)等。

  • 列引用

    • Column(表示列名,如 column_name 或 table.column)。

  • 运算符

    • Addition(+)、Subtraction(-)、Multiplication(*)、Division(/)等。

  • 函数调用

    • Function(如 COUNT(*)、SUBSTRING(str, 1, 2))。

  • 条件表达式

    • EqualsTo(=)、NotEqualsTo( 或 !=)、GreaterThan(>)、LikeExpression(LIKE)等。

  • 逻辑表达式(BinaryExpression)

    • AndExpression(AND)、OrExpression(OR)、NotExpression(NOT)。

  • 子查询

    • SubSelect(如 (SELECT ...))。

  • Case 表达式

    • CaseExpression(CASE WHEN ... THEN ... END)。

  • 其他复杂表达式

    • CastExpression(CAST(... AS ...))、IntervalExpression(时间隔断)等。

2.4 Select

用于表示查询SQL语句,有三个常见子类:PlainSelect,ParenthesedSelect,SetOperationList
2.5 Update

用于表示更新的SQL语句
得到对应表
  1. Table table = update.getTable();
复制代码
得到要更新的值
  1. List<UpdateSet> sets = update.getUpdateSets();
复制代码
获取where条件
  1. Expression expression = update.getWhere()
复制代码
2.6 Delete

用于表示删除的SQL语句
得到对应表
  1. Table table = delete.getTable();
复制代码
获取where条件
  1. Expression expression = delete.getWhere()
复制代码
2.7 Insert

用于表示添加SQL语句,有以下几种常见方法
获取添加的列
  1. List<Column> columns = insert.getColumns();
复制代码
获取添加的值
  1. Values values = insert.getValues();
复制代码
获取添加时辩论举行更新的结构
  1. INSERT INTO ... VALUES ...ON DUPLICATE KEY UPDATE ...
复制代码
  1. List<UpdateSet> duplicateUpdateColumns = insert.getDuplicateUpdateSets();
复制代码
insert select的结构,获取select
  1. INSERT ... SELECT ...
复制代码
  1. Select select = insert.getSelect();
复制代码
2.8 PlainSelect

用于表示最常规的那种查询结构,例如:
  1. select...from...join...where...
复制代码
获取select后面的结构
  1. List<SelectItem<?>> selectItems = plainSelect.getSelectItems();
复制代码
2.15 BinaryExpression


泛指比较符号:and or = >= =
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表