Class DefaultSqlServerSqlParser

java.lang.Object
org.miaixz.bus.pager.parser.defaults.DefaultSqlServerSqlParser
All Implemented Interfaces:
SqlServerSqlParser

public class DefaultSqlServerSqlParser extends Object implements SqlServerSqlParser
将sqlserver查询语句转换为分页语句 注意事项:
  1. 请先保证你的SQL可以执行
  2. sql中最好直接包含order by,可以自动从sql提取
  3. 如果没有order by,可以通过入参提供,但是需要自己保证正确
  4. 如果sql有order by,可以通过orderby参数覆盖sql中的order by
  5. order by的列名不能使用别名
  6. 表和列使用别名的时候不要使用单引号(')
该类设计为一个独立的工具类,依赖jsqlparser,可以独立使用
Since:
Java 17+
Author:
Kimi Liu
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected static final String
    别名前缀
    protected static final String
    行号
    protected static final net.sf.jsqlparser.schema.Column
    行号列
    static final String
    结束行号
    static final net.sf.jsqlparser.expression.Alias
    别名
    protected static final String
    表别名名字
    static final String
    开始行号
    protected static final net.sf.jsqlparser.statement.select.Top
    TOP 100 PERCENT
    protected static final String
    外层包装表
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected net.sf.jsqlparser.statement.select.SelectItem<?>
    addRowNumber(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem<?>> autoItems)
    获取 ROW_NUMBER() 列
    protected net.sf.jsqlparser.statement.select.OrderByElement
    cloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, String alias)
    复制 OrderByElement
    protected net.sf.jsqlparser.statement.select.OrderByElement
    cloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, net.sf.jsqlparser.expression.Expression expression)
    复制 OrderByElement
    转换为分页语句
    convertToPageSql(String sql, Integer offset, Integer limit)
    转换为分页语句
    protected List<net.sf.jsqlparser.statement.select.OrderByElement>
    getOrderByElements(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem<?>> autoItems)
    获取新的排序列表
    protected net.sf.jsqlparser.statement.select.Select
    getPageSelect(net.sf.jsqlparser.statement.select.Select select)
    获取一个外层包装的TOP查询
    protected List<net.sf.jsqlparser.statement.select.SelectItem<?>>
    getSelectItems(net.sf.jsqlparser.statement.select.PlainSelect plainSelect)
    获取查询列
    boolean
    List不空
    protected void
    processFromItem(net.sf.jsqlparser.statement.select.FromItem fromItem, int level)
    处理子查询
    protected void
    processPlainSelect(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, int level)
    处理PlainSelect类型的select
    protected void
    processSelectBody(net.sf.jsqlparser.statement.select.Select select, int level)
    处理selectBody去除Order by
    protected net.sf.jsqlparser.statement.select.Select
    wrapSetOperationList(net.sf.jsqlparser.statement.select.SetOperationList setOperationList)
    包装SetOperationList

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • START_ROW

      public static final String START_ROW
      开始行号
    • PAGE_SIZE

      public static final String PAGE_SIZE
      结束行号
    • WRAP_TABLE

      protected static final String WRAP_TABLE
      外层包装表
      See Also:
    • PAGE_TABLE_NAME

      protected static final String PAGE_TABLE_NAME
      表别名名字
      See Also:
    • PAGE_TABLE_ALIAS

      public static final net.sf.jsqlparser.expression.Alias PAGE_TABLE_ALIAS
      别名
    • PAGE_ROW_NUMBER

      protected static final String PAGE_ROW_NUMBER
      行号
      See Also:
    • PAGE_ROW_NUMBER_COLUMN

      protected static final net.sf.jsqlparser.schema.Column PAGE_ROW_NUMBER_COLUMN
      行号列
    • TOP100_PERCENT

      protected static final net.sf.jsqlparser.statement.select.Top TOP100_PERCENT
      TOP 100 PERCENT
    • PAGE_COLUMN_ALIAS_PREFIX

      protected static final String PAGE_COLUMN_ALIAS_PREFIX
      别名前缀
      See Also:
  • Constructor Details

    • DefaultSqlServerSqlParser

      public DefaultSqlServerSqlParser()
  • Method Details

    • convertToPageSql

      public String convertToPageSql(String sql)
      转换为分页语句
      Parameters:
      sql - sql
      Returns:
      the string
    • convertToPageSql

      public String convertToPageSql(String sql, Integer offset, Integer limit)
      转换为分页语句
      Specified by:
      convertToPageSql in interface SqlServerSqlParser
      Parameters:
      sql - sql
      offset - 开始位置
      limit - 结束位置
      Returns:
      the string
    • getPageSelect

      protected net.sf.jsqlparser.statement.select.Select getPageSelect(net.sf.jsqlparser.statement.select.Select select)
      获取一个外层包装的TOP查询
      Parameters:
      select - Select
      Returns:
      the select
    • wrapSetOperationList

      protected net.sf.jsqlparser.statement.select.Select wrapSetOperationList(net.sf.jsqlparser.statement.select.SetOperationList setOperationList)
      包装SetOperationList
      Parameters:
      setOperationList - SetOperationList
      Returns:
      the select
    • getSelectItems

      protected List<net.sf.jsqlparser.statement.select.SelectItem<?>> getSelectItems(net.sf.jsqlparser.statement.select.PlainSelect plainSelect)
      获取查询列
      Parameters:
      plainSelect - PlainSelect
      Returns:
      the list
    • addRowNumber

      protected net.sf.jsqlparser.statement.select.SelectItem<?> addRowNumber(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem<?>> autoItems)
      获取 ROW_NUMBER() 列
      Parameters:
      plainSelect - 原查询
      autoItems - 自动生成的查询列
      Returns:
      ROW_NUMBER() 列
    • processSelectBody

      protected void processSelectBody(net.sf.jsqlparser.statement.select.Select select, int level)
      处理selectBody去除Order by
      Parameters:
      select - 查询
      level - int
    • processPlainSelect

      protected void processPlainSelect(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, int level)
      处理PlainSelect类型的select
      Parameters:
      plainSelect - 查询
      level - int
    • processFromItem

      protected void processFromItem(net.sf.jsqlparser.statement.select.FromItem fromItem, int level)
      处理子查询
      Parameters:
      fromItem - FromItem
      level - int
    • isNotEmptyList

      public boolean isNotEmptyList(List<?> list)
      List不空
      Parameters:
      list - 集合
      Returns:
      the boolean
    • cloneOrderByElement

      protected net.sf.jsqlparser.statement.select.OrderByElement cloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, String alias)
      复制 OrderByElement
      Parameters:
      orig - 原 OrderByElement
      alias - 新 OrderByElement 的排序要素
      Returns:
      复制的新 OrderByElement
    • cloneOrderByElement

      protected net.sf.jsqlparser.statement.select.OrderByElement cloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, net.sf.jsqlparser.expression.Expression expression)
      复制 OrderByElement
      Parameters:
      orig - 原 OrderByElement
      expression - 新 OrderByElement 的排序要素
      Returns:
      复制的新 OrderByElement
    • getOrderByElements

      protected List<net.sf.jsqlparser.statement.select.OrderByElement> getOrderByElements(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem<?>> autoItems)
      获取新的排序列表
      Parameters:
      plainSelect - 原始查询
      autoItems - 生成的新查询要素
      Returns:
      新的排序列表