java.lang.Object
org.miaixz.bus.mapper.OGNL
OGNL 静态方法工具类,提供类型注册、SPI 实例获取及函数式字段名转换功能。
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringstatic final PatternSQL 字符串去除空白' " < > & * + = # - ;- SQL 注入黑名单字符\n- 回车\t- 水平制表符\s- 空格\r- 换行static final PatternSQL 注释截断检查正则,匹配包含单引号、注释或分号的 SQL 语句static final String[]SQL 函数检查正则static final StringSQL 语法关键字static final PatternSQL语法检查正则:符合两个关键字(有先后顺序)才算匹配 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic StringconvertChoose(String whenTest, String whenSqlScript, String otherwise) 生成包含 choose 标签的 SQL 脚本。static String生成包含 foreach 标签的 SQL 脚本。static String生成包含 if 标签的 SQL 脚本。static StringconvertParamMapping(Class<? extends org.apache.ibatis.type.TypeHandler<?>> typeHandler, org.apache.ibatis.type.JdbcType jdbcType, Integer numericScale) 组合 TypeHandler、JdbcType 和数字精度的映射配置。static StringconvertSet(String sqlScript) 生成包含 set 标签的 SQL 脚本。static StringconvertTrim(String sqlScript, String prefix, String suffix, String prefixOverrides, String suffixOverrides) 生成包含 trim 标签的 SQL 脚本。static StringconvertWhere(String sqlScript) 生成包含 where 标签的 SQL 脚本。static ClassFieldfnToFieldName(Fn<?, ?> fn) 将函数式接口 Fn 转换为对应的字段名或列名。static <T> List<T> getInstances(Class<T> clazz) 获取指定接口或类的所有 SPI 实现实例,并按 ORDER 接口的顺序排序(如果适用)。static String防止 SQL 注入处理static booleanisSimpleType(Class<?> clazz) 判断指定类是否为已知的简单类型。static StringmappingJdbcType(org.apache.ibatis.type.JdbcType jdbcType) 生成 JdbcType 的映射配置。static StringmappingNumericScale(Integer numericScale) 生成数字精度的映射配置。static StringmappingTypeHandler(Class<? extends org.apache.ibatis.type.TypeHandler<?>> typeHandler) 生成 TypeHandler 的映射配置。static voidregisterSimpleType(Class<?> clazz) 注册新的简单类型。static voidregisterSimpleType(String classes) 批量注册简单类型,通过逗号分隔的类名字符串。static voidregisterSimpleTypeSilence(String clazz) 静默注册简单类型,忽略类不存在的异常。static StringremoveEscapeCharacter(String text) 删除字段中的转义字符(单引号和双引号)。static StringreplaceAllBlank(String value) 字符串去除空白: \n 回车 \t 水平制表符 \s 空格 \r 换行static String生成安全的 MyBatis 参数占位符(#{param})。static String生成安全的 MyBatis 参数占位符(#{param,mapping})。static StringunSafeParam(String param) 生成非安全的 MyBatis 参数占位符(${param})。static booleanvalidateSql(String value) 检查参数是否存在 SQL 注入风险。
-
Field Details
-
SQL_SYNTAX_PATTERN
SQL语法检查正则:符合两个关键字(有先后顺序)才算匹配 -
SQL_COMMENT_PATTERN
SQL 注释截断检查正则,匹配包含单引号、注释或分号的 SQL 语句 -
SQL_SYNTAX_KEYWORD
SQL 语法关键字- See Also:
-
SQL_FUNCTION_PATTERN
SQL 函数检查正则 -
MESSAGE_TEMPLATE
- See Also:
-
REPLACE_BLANK
SQL 字符串去除空白' " < > & * + = # - ;- SQL 注入黑名单字符\n- 回车\t- 水平制表符\s- 空格\r- 换行
-
-
Constructor Details
-
OGNL
public OGNL()
-
-
Method Details
-
registerSimpleType
注册新的简单类型。- Parameters:
clazz- 要注册的类型
-
registerSimpleType
批量注册简单类型,通过逗号分隔的类名字符串。- Parameters:
classes- 类名字符串,格式为全限定类名,逗号分隔- Throws:
RuntimeException- 如果类名无效或无法找到
-
registerSimpleTypeSilence
静默注册简单类型,忽略类不存在的异常。- Parameters:
clazz- 类名
-
isSimpleType
判断指定类是否为已知的简单类型。- Parameters:
clazz- 要检查的类- Returns:
- 如果是简单类型则返回 true,否则返回 false
-
getInstances
获取指定接口或类的所有 SPI 实现实例,并按 ORDER 接口的顺序排序(如果适用)。- Type Parameters:
T- 类型参数- Parameters:
clazz- 接口或类- Returns:
- 按顺序排列的实现实例列表
-
fnToFieldName
将函数式接口 Fn 转换为对应的字段名或列名。- Parameters:
fn- 函数式接口实例- Returns:
- 包含类和字段名/列名的 ClassField 或 ClassColumn 对象
- Throws:
RuntimeException- 如果反射操作失败
-
validateSql
检查参数是否存在 SQL 注入风险。- Parameters:
value- 要检查的参数- Returns:
- 如果存在 SQL 注入风险返回 true,否则返回 false
-
injection
防止 SQL 注入处理- Parameters:
value- 字符串
-
replaceAllBlank
字符串去除空白:- \n 回车
- \t 水平制表符
- \s 空格
- \r 换行
- Parameters:
value- 字符串
-
removeEscapeCharacter
删除字段中的转义字符(单引号和双引号)。- Parameters:
text- 待处理的字段- Returns:
- 删除转义字符后的字段值
- Throws:
NullPointerException- 如果 text 为 null
-
convertIf
生成包含 if 标签的 SQL 脚本。- Parameters:
sqlScript- SQL 脚本片段ifTest- if 标签的 test 条件newLine- 是否在新行包裹脚本- Returns:
- 包含 if 标签的 SQL 脚本
-
convertTrim
public static String convertTrim(String sqlScript, String prefix, String suffix, String prefixOverrides, String suffixOverrides) 生成包含 trim 标签的 SQL 脚本。- Parameters:
sqlScript- SQL 脚本片段prefix- 前缀suffix- 后缀prefixOverrides- 要移除的前缀suffixOverrides- 要移除的后缀- Returns:
- 包含 trim 标签的 SQL 脚本
-
convertChoose
生成包含 choose 标签的 SQL 脚本。- Parameters:
whenTest- when 标签的 test 条件whenSqlScript- when 条件成立时的 SQL 脚本otherwise- otherwise 标签的内容- Returns:
- 包含 choose 标签的 SQL 脚本
-
convertForeach
public static String convertForeach(String sqlScript, String collection, String index, String item, String separator) 生成包含 foreach 标签的 SQL 脚本。- Parameters:
sqlScript- foreach 内部的 SQL 脚本collection- 集合名称index- 索引名称item- 元素名称separator- 分隔符- Returns:
- 包含 foreach 标签的 SQL 脚本
-
convertWhere
生成包含 where 标签的 SQL 脚本。- Parameters:
sqlScript- where 内部的 SQL 脚本- Returns:
- 包含 where 标签的 SQL 脚本
-
convertSet
生成包含 set 标签的 SQL 脚本。- Parameters:
sqlScript- set 内部的 SQL 脚本- Returns:
- 包含 set 标签的 SQL 脚本
-
safeParam
生成安全的 MyBatis 参数占位符(#{param})。- Parameters:
param- 参数名称- Returns:
- 安全的参数占位符脚本
-
safeParam
生成安全的 MyBatis 参数占位符(#{param,mapping})。- Parameters:
param- 参数名称mapping- 参数映射配置- Returns:
- 安全的参数占位符脚本
-
unSafeParam
生成非安全的 MyBatis 参数占位符(${param})。- Parameters:
param- 参数名称- Returns:
- 非安全的参数占位符脚本
-
mappingTypeHandler
public static String mappingTypeHandler(Class<? extends org.apache.ibatis.type.TypeHandler<?>> typeHandler) 生成 TypeHandler 的映射配置。- Parameters:
typeHandler- TypeHandler 类- Returns:
- TypeHandler 映射配置字符串,若 typeHandler 为 null 则返回 null
-
mappingJdbcType
生成 JdbcType 的映射配置。- Parameters:
jdbcType- JdbcType 类型- Returns:
- JdbcType 映射配置字符串,若 jdbcType 为 null 则返回 null
-
mappingNumericScale
生成数字精度的映射配置。- Parameters:
numericScale- 数字精度- Returns:
- 数字精度映射配置字符串,若 numericScale 为 null 则返回 null
-
convertParamMapping
public static String convertParamMapping(Class<? extends org.apache.ibatis.type.TypeHandler<?>> typeHandler, org.apache.ibatis.type.JdbcType jdbcType, Integer numericScale) 组合 TypeHandler、JdbcType 和数字精度的映射配置。- Parameters:
typeHandler- TypeHandler 类jdbcType- JdbcType 类型numericScale- 数字精度- Returns:
- 组合的映射配置字符串,若所有参数为 null 则返回 null
-