Module bus.mapper

Class OGNL

java.lang.Object
org.miaixz.bus.mapper.OGNL

public class OGNL extends Object
OGNL 静态方法工具类,提供类型注册、SPI 实例获取及函数式字段名转换功能。
Since:
Java 17+
Author:
Kimi Liu
  • Field Details

    • SQL_SYNTAX_PATTERN

      public static final Pattern SQL_SYNTAX_PATTERN
      SQL语法检查正则:符合两个关键字(有先后顺序)才算匹配
    • SQL_COMMENT_PATTERN

      public static final Pattern SQL_COMMENT_PATTERN
      SQL 注释截断检查正则,匹配包含单引号、注释或分号的 SQL 语句
    • SQL_SYNTAX_KEYWORD

      public static final String SQL_SYNTAX_KEYWORD
      SQL 语法关键字
      See Also:
    • SQL_FUNCTION_PATTERN

      public static final String[] SQL_FUNCTION_PATTERN
      SQL 函数检查正则
    • MESSAGE_TEMPLATE

      public static final String MESSAGE_TEMPLATE
      See Also:
    • REPLACE_BLANK

      public static final Pattern REPLACE_BLANK
      SQL 字符串去除空白
      • ' " < > & * + = # - ; - SQL 注入黑名单字符
      • \n - 回车
      • \t - 水平制表符
      • \s - 空格
      • \r - 换行
  • Constructor Details

    • OGNL

      public OGNL()
  • Method Details

    • registerSimpleType

      public static void registerSimpleType(Class<?> clazz)
      注册新的简单类型。
      Parameters:
      clazz - 要注册的类型
    • registerSimpleType

      public static void registerSimpleType(String classes)
      批量注册简单类型,通过逗号分隔的类名字符串。
      Parameters:
      classes - 类名字符串,格式为全限定类名,逗号分隔
      Throws:
      RuntimeException - 如果类名无效或无法找到
    • registerSimpleTypeSilence

      public static void registerSimpleTypeSilence(String clazz)
      静默注册简单类型,忽略类不存在的异常。
      Parameters:
      clazz - 类名
    • isSimpleType

      public static boolean isSimpleType(Class<?> clazz)
      判断指定类是否为已知的简单类型。
      Parameters:
      clazz - 要检查的类
      Returns:
      如果是简单类型则返回 true,否则返回 false
    • getInstances

      public static <T> List<T> getInstances(Class<T> clazz)
      获取指定接口或类的所有 SPI 实现实例,并按 ORDER 接口的顺序排序(如果适用)。
      Type Parameters:
      T - 类型参数
      Parameters:
      clazz - 接口或类
      Returns:
      按顺序排列的实现实例列表
    • fnToFieldName

      public static ClassField fnToFieldName(Fn<?,?> fn)
      将函数式接口 Fn 转换为对应的字段名或列名。
      Parameters:
      fn - 函数式接口实例
      Returns:
      包含类和字段名/列名的 ClassField 或 ClassColumn 对象
      Throws:
      RuntimeException - 如果反射操作失败
    • validateSql

      public static boolean validateSql(String value)
      检查参数是否存在 SQL 注入风险。
      Parameters:
      value - 要检查的参数
      Returns:
      如果存在 SQL 注入风险返回 true,否则返回 false
    • injection

      public static String injection(String value)
      防止 SQL 注入处理
      Parameters:
      value - 字符串
    • replaceAllBlank

      public static String replaceAllBlank(String value)
      字符串去除空白:
      • \n 回车
      • \t 水平制表符
      • \s 空格
      • \r 换行
      Parameters:
      value - 字符串
    • removeEscapeCharacter

      public static String removeEscapeCharacter(String text)
      删除字段中的转义字符(单引号和双引号)。
      Parameters:
      text - 待处理的字段
      Returns:
      删除转义字符后的字段值
      Throws:
      NullPointerException - 如果 text 为 null
    • convertIf

      public static String convertIf(String sqlScript, String ifTest, boolean newLine)
      生成包含 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

      public static String convertChoose(String whenTest, String whenSqlScript, String otherwise)
      生成包含 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

      public static String convertWhere(String sqlScript)
      生成包含 where 标签的 SQL 脚本。
      Parameters:
      sqlScript - where 内部的 SQL 脚本
      Returns:
      包含 where 标签的 SQL 脚本
    • convertSet

      public static String convertSet(String sqlScript)
      生成包含 set 标签的 SQL 脚本。
      Parameters:
      sqlScript - set 内部的 SQL 脚本
      Returns:
      包含 set 标签的 SQL 脚本
    • safeParam

      public static String safeParam(String param)
      生成安全的 MyBatis 参数占位符(#{param})。
      Parameters:
      param - 参数名称
      Returns:
      安全的参数占位符脚本
    • safeParam

      public static String safeParam(String param, String mapping)
      生成安全的 MyBatis 参数占位符(#{param,mapping})。
      Parameters:
      param - 参数名称
      mapping - 参数映射配置
      Returns:
      安全的参数占位符脚本
    • unSafeParam

      public static String unSafeParam(String param)
      生成非安全的 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

      public static String mappingJdbcType(org.apache.ibatis.type.JdbcType jdbcType)
      生成 JdbcType 的映射配置。
      Parameters:
      jdbcType - JdbcType 类型
      Returns:
      JdbcType 映射配置字符串,若 jdbcType 为 null 则返回 null
    • mappingNumericScale

      public static String mappingNumericScale(Integer numericScale)
      生成数字精度的映射配置。
      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