public class ParserSupport
extends java.lang.Object
该类提供了一系列用于解析和处理 SQL 语句的工具方法。
支持的功能包括:
| 限定符和类型 | 类和说明 |
|---|---|
static class |
ParserSupport.SqlParserInfo |
| 构造器和说明 |
|---|
ParserSupport() |
| 限定符和类型 | 方法和说明 |
|---|---|
static net.sf.jsqlparser.expression.Expression |
addExpressions(net.sf.jsqlparser.expression.Expression whereCause,
java.lang.String expression,
boolean useAnd)
为已有的WHERE条件表达式添加新的表达式
若原WHERE条件表达式是OrExpression类型,会将其用括号包裹
若新表达式为空,则直接返回原WHERE条件表达式 若新表达式以"WHERE"开头,会将其作为WHERE子句解析 否则将其作为普通表达式解析 最后根据useAnd参数决定使用AND还是OR连接新旧表达式 |
static net.sf.jsqlparser.statement.Statement |
addExpressions(net.sf.jsqlparser.statement.Statement statement,
java.lang.String joinClause,
java.lang.String expression,
boolean useAnd)
为SQL语句对象添加新的WHERE条件表达式和JOIN子句
该方法会解析不同类型的SQL语句(如SELECT、DELETE、UPDATE),
为这些语句添加新的WHERE条件表达式和JOIN子句, 并根据useAnd参数决定使用AND还是OR连接新旧表达式。 |
static java.util.List<net.sf.jsqlparser.statement.select.Join> |
addJoins(java.util.List<net.sf.jsqlparser.statement.select.Join> joins,
java.lang.String joinClause)
为已有的JOIN列表添加新的JOIN子句
若传入的JOIN子句为空,则直接返回原JOIN列表;
解析传入的JOIN子句为JOIN列表,若原JOIN列表不为空,则将解析后的JOIN列表追加到原列表后返回; 若原JOIN列表为空,则直接返回解析后的JOIN列表。 |
static com.google.common.base.Function<java.lang.String,java.lang.String> |
aliasFunctionOf(net.sf.jsqlparser.statement.Statement statement)
从 SQL 语句对象中创建一个用于根据表名获取对应别名的函数。
|
static java.util.Map<java.lang.String,java.lang.String> |
aliasOf(net.sf.jsqlparser.statement.Statement statement)
从 SQL 语句对象中提取表名及其对应的别名映射。
|
static com.google.common.base.Function<java.lang.String,java.lang.String> |
asAliasFunction(java.util.Map<java.lang.String,java.lang.String> tableAlias)
创建一个用于根据表名获取对应别名的函数。
|
static java.lang.String |
countSql(net.sf.jsqlparser.statement.select.Select select,
java.lang.String countColumn)
生成 count 查询 SQL,如果
select为空则返回null |
static java.lang.String |
countSql(java.lang.String sql,
java.lang.String countColumn)
生成 count 查询 SQL,如果
sql为空或不是SELECT语句不能生成count语句则返回null |
static java.util.Map<java.lang.String,java.lang.String> |
extractJoinedTables(java.lang.String joinClause)
解析JOIN子句,获取已连接的表信息
对传入的JOIN子句进行解析,处理流程如下:
1.
|
static boolean |
isBoolean(net.sf.jsqlparser.schema.Column column)
如果
Column没有定义table,且字段名为true/false(不区分大小写)则视为布尔常量 |
static <M extends net.sf.jsqlparser.Model> |
normalizeModel(java.lang.String tablename,
M model,
java.util.Map<java.lang.String,java.lang.String> tableAlias)
规范化模型对象,使用
CanonicalColumnVisitor对不同类型的模型对象进行访问,为没有指定表名的字段名自动加上 tablename 指定的表名前缀,最后返回处理后的模型对象。 |
static java.lang.String |
normalizeSql(java.lang.String tablename,
java.lang.String sql,
java.util.Map<java.lang.String,java.lang.String> tableAlias)
规范化SQL语句字符串
若传入的SQL语句为空或null,则直接返回原值;
若不为空,则调用 normalizeStatement(String, String, Map)方法对其进行规范化处理,若解析过程中发生异常,则不做任何处理返回原值。 |
static net.sf.jsqlparser.statement.Statement |
normalizeStatement(java.lang.String tablename,
net.sf.jsqlparser.statement.Statement statement,
java.util.Map<java.lang.String,java.lang.String> tableAlias)
规范化SQL语句对应的Statement对象
使用
CanonicalColumnVisitor对传入的Statement对象进行访问,
为没有指定表名的字段名自动加上 tablename 指定的表名前缀,最后返回处理后的Statement对象。 |
static net.sf.jsqlparser.statement.Statement |
normalizeStatement(java.lang.String tablename,
java.lang.String sql,
java.util.Map<java.lang.String,java.lang.String> tableAlias)
规范化SQL语句对应的Statement对象
解析传入的SQL语句,获取对应的Statement对象,并使用
CanonicalColumnVisitor对其进行访问,
为没有指定表名的字段名自动加上 tablename 指定的表名前缀,最后返回处理后的Statement对象。 |
static net.sf.jsqlparser.statement.Statement |
parse(java.lang.String sql,
net.sf.jsqlparser.parser.CCJSqlParserVisitor visitor,
SqlSyntaxNormalizer sqlSyntaxNormalizer)
实现SQL语句解析,解析成功则返回解析后的
Statement,
并通过visitor参数提供基于AST(抽象语法树)的遍历所有节点的能力。 |
static ParserSupport.SqlParserInfo |
parse0(java.lang.String sql,
net.sf.jsqlparser.parser.CCJSqlParserVisitor visitor,
SqlSyntaxNormalizer sqlSyntaxAnalyzer)
参照
CCJSqlParserUtil.parseAST(String)和CCJSqlParserUtil.parse(String)实现SQL语句解析,
解析成功则返回解析后的ParserSupport.SqlParserInfo对象,
并通过visitor参数提供基于AST(抽象语法树)的遍历所有节点的能力。 |
static <T> T |
parseComponent(java.lang.String input,
java.lang.Class<T> targetType)
调用
CCJSqlParser解析SQL语句部件返回解析生成的对象,
使用targetType的类名作为解析方法名 |
static <T> T |
parseComponent(java.lang.String input,
java.lang.String method)
调用
CCJSqlParser解析SQL语句部件返回解析生成的对象,如'ORDER BY id DESC' |
static <T> T |
parseComponent(java.lang.String input,
java.lang.String method,
java.lang.Class<T> targetType)
调用
CCJSqlParser解析SQL语句部件返回解析生成的对象,如'ORDER BY id DESC' |
static net.sf.jsqlparser.statement.select.Select |
parseSelect(java.lang.String sql)
解析SELECT SQL语句,解析失败或非SELECT语句则抛出异常
|
static net.sf.jsqlparser.statement.select.Select |
parseSelectUnchecked(java.lang.String sql)
解析SELECT SQL语句,解析失败或非SELECT语句则
|
static net.sf.jsqlparser.statement.Statement |
parseStatement(java.lang.String sql)
解析 SQL 语句字符串并返回对应的 Statement 对象
该方法使用 ParserSupport 工具类对输入的 SQL 字符串进行解析,
若解析成功则返回解析得到的 Statement 对象,若解析失败则抛出 JSQLParserException 异常。 |
public static net.sf.jsqlparser.statement.select.Select parseSelect(java.lang.String sql)
sql - public static net.sf.jsqlparser.statement.select.Select parseSelectUnchecked(java.lang.String sql)
sql - public static java.lang.String countSql(net.sf.jsqlparser.statement.select.Select select,
java.lang.String countColumn)
select为空则返回nullselect - countColumn - 列名,默认 0public static java.lang.String countSql(java.lang.String sql,
java.lang.String countColumn)
sql为空或不是SELECT语句不能生成count语句则返回nullsql - countColumn - 列名,默认 0public static net.sf.jsqlparser.statement.Statement parse(java.lang.String sql,
net.sf.jsqlparser.parser.CCJSqlParserVisitor visitor,
SqlSyntaxNormalizer sqlSyntaxNormalizer)
throws net.sf.jsqlparser.JSQLParserException
Statement,
并通过visitor参数提供基于AST(抽象语法树)的遍历所有节点的能力。sql - SQL语句visitor - 遍历所有节点的SimpleNode接口实例,为null忽略sqlSyntaxNormalizer - SQL语句分析转换器,为null忽略net.sf.jsqlparser.JSQLParserException - 输入的SQL语句有语法错误parse0(String, CCJSqlParserVisitor, SqlSyntaxNormalizer)public static ParserSupport.SqlParserInfo parse0(java.lang.String sql, net.sf.jsqlparser.parser.CCJSqlParserVisitor visitor, SqlSyntaxNormalizer sqlSyntaxAnalyzer) throws net.sf.jsqlparser.JSQLParserException
CCJSqlParserUtil.parseAST(String)和CCJSqlParserUtil.parse(String)实现SQL语句解析,
解析成功则返回解析后的ParserSupport.SqlParserInfo对象,
并通过visitor参数提供基于AST(抽象语法树)的遍历所有节点的能力。sql - SQL语句visitor - 遍历所有节点的SimpleNode接口实例,为null忽略sqlSyntaxAnalyzer - SQL语句分析转换器,为null忽略net.sf.jsqlparser.JSQLParserException - 输入的SQL语句有语法错误Node.jjtAccept(CCJSqlParserVisitor, Object)public static <T> T parseComponent(java.lang.String input,
java.lang.String method,
java.lang.Class<T> targetType)
CCJSqlParser解析SQL语句部件返回解析生成的对象,如'ORDER BY id DESC'T - input - method - 指定调用的CCJSqlParser解析方法targetType - 返回的解析对象类型public static <T> T parseComponent(java.lang.String input,
java.lang.String method)
CCJSqlParser解析SQL语句部件返回解析生成的对象,如'ORDER BY id DESC'T - input - method - 指定调用的CCJSqlParser解析方法public static <T> T parseComponent(java.lang.String input,
java.lang.Class<T> targetType)
CCJSqlParser解析SQL语句部件返回解析生成的对象,
使用targetType的类名作为解析方法名parseComponent(String, String, Class)public static net.sf.jsqlparser.statement.Statement parseStatement(java.lang.String sql)
throws net.sf.jsqlparser.JSQLParserException
该方法使用 ParserSupport 工具类对输入的 SQL 字符串进行解析,
若解析成功则返回解析得到的 Statement 对象,若解析失败则抛出 JSQLParserException 异常。
sql - 待解析的 SQL 语句字符串net.sf.jsqlparser.JSQLParserException - 当 SQL 语句解析失败时抛出该异常public static boolean isBoolean(net.sf.jsqlparser.schema.Column column)
Column没有定义table,且字段名为true/false(不区分大小写)则视为布尔常量column - public static com.google.common.base.Function<java.lang.String,java.lang.String> asAliasFunction(java.util.Map<java.lang.String,java.lang.String> tableAlias)
tableAlias - 表名与别名的映射,键为表名,值为对应的表别名public static java.util.Map<java.lang.String,java.lang.String> aliasOf(net.sf.jsqlparser.statement.Statement statement)
statement - SQL 语句对象,包含要解析的 SQL 语句信息,可为 nullpublic static com.google.common.base.Function<java.lang.String,java.lang.String> aliasFunctionOf(net.sf.jsqlparser.statement.Statement statement)
该方法会先调用 aliasOf(Statement) 方法从 SQL 语句对象中提取表名及其对应的别名映射,
然后将该映射转换为不可变对象,最后调用 asAliasFunction(Map) 方法创建一个函数对象。
将输入参数转为不可变对象,便于返回的对象用于 aocache 的 KEY。
statement - SQL 语句对象,包含要解析的 SQL 语句信息public static java.util.Map<java.lang.String,java.lang.String> extractJoinedTables(java.lang.String joinClause)
throws net.sf.jsqlparser.JSQLParserException
对传入的JOIN子句进行解析,处理流程如下:
1. 若JOIN子句为空或null,则返回空映射
2. 使用parseComponent(String, String, Class)解析JOIN子句,获取JOIN列表
3. 从每个JOIN对象中提取右连接项(Join.getRightItem())
4. 将右连接项转换为表名(或别名)与表对象的映射
joinClause - 待解析的JOIN子句net.sf.jsqlparser.JSQLParserException - 当解析JOIN子句发生异常时抛出public static <M extends net.sf.jsqlparser.Model> M normalizeModel(java.lang.String tablename,
M model,
java.util.Map<java.lang.String,java.lang.String> tableAlias)
throws net.sf.jsqlparser.JSQLParserException
CanonicalColumnVisitor对不同类型的模型对象进行访问,
支持处理的模型对象类型包括:
- Statement SQL语句对象
- Expression 表达式对象
- FromItem FROM子句项对象
- SelectBody SELECT语句主体对象
M - 模型对象的泛型类型,需继承自Modeltablename - 表名,用于为缺少表名前缀的列添加表名或别名model - 待规范化的模型对象tableAlias - 表别名映射,用于替换SQL语句中的表名,为null忽略net.sf.jsqlparser.JSQLParserException - 当处理过程中发生异常时抛出public static net.sf.jsqlparser.statement.Statement normalizeStatement(java.lang.String tablename,
net.sf.jsqlparser.statement.Statement statement,
java.util.Map<java.lang.String,java.lang.String> tableAlias)
throws net.sf.jsqlparser.JSQLParserException
使用CanonicalColumnVisitor对传入的Statement对象进行访问,
为没有指定表名的字段名自动加上 tablename 指定的表名前缀,最后返回处理后的Statement对象。
tablename - 表名,用于为缺少表名前缀的列添加表名或别名statement - 待规范化的SQL语句对应的Statement对象tableAlias - 表别名映射,用于替换SQL语句中的表名,为null忽略net.sf.jsqlparser.JSQLParserException - 当处理过程中发生异常时抛出public static net.sf.jsqlparser.statement.Statement normalizeStatement(java.lang.String tablename,
java.lang.String sql,
java.util.Map<java.lang.String,java.lang.String> tableAlias)
throws net.sf.jsqlparser.JSQLParserException
解析传入的SQL语句,获取对应的Statement对象,并使用CanonicalColumnVisitor对其进行访问,
为没有指定表名的字段名自动加上 tablename 指定的表名前缀,最后返回处理后的Statement对象。
tablename - 目标表名,用于为没有指定表名的字段添加前缀sql - 待解析的SQL语句tableAlias - 表别名映射,用于替换SQL语句中的表名,为null忽略net.sf.jsqlparser.JSQLParserException - 当解析SQL语句发生异常时抛出public static java.lang.String normalizeSql(java.lang.String tablename,
java.lang.String sql,
java.util.Map<java.lang.String,java.lang.String> tableAlias)
若传入的SQL语句为空或null,则直接返回原值;
若不为空,则调用normalizeStatement(String, String, Map)方法对其进行规范化处理,
若解析过程中发生异常,则不做任何处理返回原值。
tablename - 表名,用于为缺少表名前缀的列添加表名或别名sql - 待规范化的SQL语句字符串tableAlias - 表别名映射,用于替换SQL语句中的表名,为null忽略public static net.sf.jsqlparser.expression.Expression addExpressions(net.sf.jsqlparser.expression.Expression whereCause,
java.lang.String expression,
boolean useAnd)
若原WHERE条件表达式是OrExpression类型,会将其用括号包裹
若新表达式为空,则直接返回原WHERE条件表达式
若新表达式以"WHERE"开头,会将其作为WHERE子句解析
否则将其作为普通表达式解析
最后根据useAnd参数决定使用AND还是OR连接新旧表达式
whereCause - 已有的WHERE条件表达式,可以为nullexpression - 待添加的新表达式useAnd - 是否使用AND连接新旧表达式,true表示使用AND,false表示使用ORpublic static java.util.List<net.sf.jsqlparser.statement.select.Join> addJoins(java.util.List<net.sf.jsqlparser.statement.select.Join> joins,
java.lang.String joinClause)
若传入的JOIN子句为空,则直接返回原JOIN列表;
解析传入的JOIN子句为JOIN列表,若原JOIN列表不为空,则将解析后的JOIN列表追加到原列表后返回;
若原JOIN列表为空,则直接返回解析后的JOIN列表。
joins - 已有的JOIN列表,可为nulljoinClause - 待添加的JOIN子句public static net.sf.jsqlparser.statement.Statement addExpressions(net.sf.jsqlparser.statement.Statement statement,
java.lang.String joinClause,
java.lang.String expression,
boolean useAnd)
该方法会解析不同类型的SQL语句(如SELECT、DELETE、UPDATE),
为这些语句添加新的WHERE条件表达式和JOIN子句,
并根据useAnd参数决定使用AND还是OR连接新旧表达式。
statement - SQL语句对象,包含要处理的SQL语句信息joinClause - 待添加的JOIN子句expression - 待添加的新表达式useAnd - 是否使用AND连接新旧表达式,true表示使用AND,false表示使用ORCopyright © 2025. All Rights Reserved.