类 PaginationInnerInterceptor

  • 所有已实现的接口:
    InnerInterceptor

    public class PaginationInnerInterceptor
    extends java.lang.Object
    implements InnerInterceptor
    分页拦截器

    默认对 left join 进行优化,虽然能优化count,但是加上分页的话如果1对多本身结果条数就是不正确的

    从以下版本开始:
    3.4.0
    作者:
    hubin
    • 字段概要

      字段 
      修饰符和类型 字段 说明
      protected static java.util.List<net.sf.jsqlparser.statement.select.SelectItem> COUNT_SELECT_ITEM
      获取jsqlparser中count的SelectItem
      protected static java.util.Map<java.lang.String,​org.apache.ibatis.mapping.MappedStatement> countMsCache  
      protected org.apache.ibatis.logging.Log logger  
      protected java.lang.Long maxLimit
      单页分页条数限制
      protected boolean optimizeJoin
      生成 countSql 优化掉 join 现在只支持 left join
      protected boolean overflow
      溢出总页数后是否进行处理
    • 方法概要

      所有方法 实例方法 具体方法 
      修饰符和类型 方法 说明
      protected java.util.List<net.sf.jsqlparser.statement.select.OrderByElement> addOrderByElements​(java.util.List<com.baomidou.mybatisplus.core.metadata.OrderItem> orderList, java.util.List<net.sf.jsqlparser.statement.select.OrderByElement> orderByElements)  
      protected java.lang.String autoCountSql​(com.baomidou.mybatisplus.core.metadata.IPage<?> page, java.lang.String sql)
      获取自动优化的 countSql
      void beforeQuery​(org.apache.ibatis.executor.Executor executor, org.apache.ibatis.mapping.MappedStatement ms, java.lang.Object parameter, org.apache.ibatis.session.RowBounds rowBounds, org.apache.ibatis.session.ResultHandler resultHandler, org.apache.ibatis.mapping.BoundSql boundSql)
      Executor.query(MappedStatement, Object, RowBounds, ResultHandler, CacheKey, BoundSql) 操作前置处理
      protected org.apache.ibatis.mapping.MappedStatement buildAutoCountMappedStatement​(org.apache.ibatis.mapping.MappedStatement ms)
      构建 mp 自用自动的 MappedStatement
      protected org.apache.ibatis.mapping.MappedStatement buildCountMappedStatement​(org.apache.ibatis.mapping.MappedStatement ms, java.lang.String countId)
      获取指定的 id 的 MappedStatement
      protected boolean canEqual​(java.lang.Object other)  
      java.lang.String concatOrderBy​(java.lang.String originalSql, java.util.List<com.baomidou.mybatisplus.core.metadata.OrderItem> orderList)
      查询SQL拼接Order By
      protected boolean continuePage​(com.baomidou.mybatisplus.core.metadata.IPage<?> page)
      count 查询之后,是否继续执行分页
      boolean equals​(java.lang.Object o)  
      protected IDialect findIDialect​(org.apache.ibatis.executor.Executor executor)
      获取分页方言类的逻辑
      com.baomidou.mybatisplus.annotation.DbType getDbType()
      数据库类型
      IDialect getDialect()
      方言实现类
      org.apache.ibatis.logging.Log getLogger()  
      java.lang.Long getMaxLimit()
      单页分页条数限制
      protected void handlerLimit​(com.baomidou.mybatisplus.core.metadata.IPage<?> page, java.lang.Long limit)
      处理超出分页条数限制,默认归为限制数
      protected void handlerOverflow​(com.baomidou.mybatisplus.core.metadata.IPage<?> page)
      处理页数溢出,默认设置为第一页
      int hashCode()  
      boolean isOptimizeJoin()
      生成 countSql 优化掉 join 现在只支持 left join
      boolean isOverflow()
      溢出总页数后是否进行处理
      protected java.lang.String lowLevelCountSql​(java.lang.String originalSql)
      无法进行count优化时,降级使用此方法
      void setDbType​(com.baomidou.mybatisplus.annotation.DbType dbType)
      数据库类型
      void setDialect​(IDialect dialect)
      方言实现类
      void setMaxLimit​(java.lang.Long maxLimit)
      单页分页条数限制
      void setOptimizeJoin​(boolean optimizeJoin)
      生成 countSql 优化掉 join 现在只支持 left join
      void setOverflow​(boolean overflow)
      溢出总页数后是否进行处理
      void setProperties​(java.util.Properties properties)  
      java.lang.String toString()  
      boolean willDoQuery​(org.apache.ibatis.executor.Executor executor, org.apache.ibatis.mapping.MappedStatement ms, java.lang.Object parameter, org.apache.ibatis.session.RowBounds rowBounds, org.apache.ibatis.session.ResultHandler resultHandler, org.apache.ibatis.mapping.BoundSql boundSql)
      这里进行count,如果count为0这返回false(就是不再执行sql了)
      • 从类继承的方法 java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    • 字段详细资料

      • COUNT_SELECT_ITEM

        protected static final java.util.List<net.sf.jsqlparser.statement.select.SelectItem> COUNT_SELECT_ITEM
        获取jsqlparser中count的SelectItem
      • countMsCache

        protected static final java.util.Map<java.lang.String,​org.apache.ibatis.mapping.MappedStatement> countMsCache
      • logger

        protected final org.apache.ibatis.logging.Log logger
      • overflow

        protected boolean overflow
        溢出总页数后是否进行处理
      • maxLimit

        protected java.lang.Long maxLimit
        单页分页条数限制
      • optimizeJoin

        protected boolean optimizeJoin
        生成 countSql 优化掉 join 现在只支持 left join
        从以下版本开始:
        3.4.2
    • 构造器详细资料

      • PaginationInnerInterceptor

        public PaginationInnerInterceptor​(com.baomidou.mybatisplus.annotation.DbType dbType)
      • PaginationInnerInterceptor

        public PaginationInnerInterceptor​(IDialect dialect)
      • PaginationInnerInterceptor

        public PaginationInnerInterceptor()
    • 方法详细资料

      • willDoQuery

        public boolean willDoQuery​(org.apache.ibatis.executor.Executor executor,
                                   org.apache.ibatis.mapping.MappedStatement ms,
                                   java.lang.Object parameter,
                                   org.apache.ibatis.session.RowBounds rowBounds,
                                   org.apache.ibatis.session.ResultHandler resultHandler,
                                   org.apache.ibatis.mapping.BoundSql boundSql)
                            throws java.sql.SQLException
        这里进行count,如果count为0这返回false(就是不再执行sql了)
        指定者:
        willDoQuery 在接口中 InnerInterceptor
        参数:
        executor - Executor(可能是代理对象)
        ms - MappedStatement
        parameter - parameter
        rowBounds - rowBounds
        resultHandler - resultHandler
        boundSql - boundSql
        返回:
        新的 boundSql
        抛出:
        java.sql.SQLException
      • beforeQuery

        public void beforeQuery​(org.apache.ibatis.executor.Executor executor,
                                org.apache.ibatis.mapping.MappedStatement ms,
                                java.lang.Object parameter,
                                org.apache.ibatis.session.RowBounds rowBounds,
                                org.apache.ibatis.session.ResultHandler resultHandler,
                                org.apache.ibatis.mapping.BoundSql boundSql)
                         throws java.sql.SQLException
        从接口复制的说明: InnerInterceptor
        Executor.query(MappedStatement, Object, RowBounds, ResultHandler, CacheKey, BoundSql) 操作前置处理

        改改sql啥的

        指定者:
        beforeQuery 在接口中 InnerInterceptor
        参数:
        executor - Executor(可能是代理对象)
        ms - MappedStatement
        parameter - parameter
        rowBounds - rowBounds
        resultHandler - resultHandler
        boundSql - boundSql
        抛出:
        java.sql.SQLException
      • findIDialect

        protected IDialect findIDialect​(org.apache.ibatis.executor.Executor executor)
        获取分页方言类的逻辑
        参数:
        executor - Executor
        返回:
        分页方言类
      • buildCountMappedStatement

        protected org.apache.ibatis.mapping.MappedStatement buildCountMappedStatement​(org.apache.ibatis.mapping.MappedStatement ms,
                                                                                      java.lang.String countId)
        获取指定的 id 的 MappedStatement
        参数:
        ms - MappedStatement
        countId - id
        返回:
        MappedStatement
      • buildAutoCountMappedStatement

        protected org.apache.ibatis.mapping.MappedStatement buildAutoCountMappedStatement​(org.apache.ibatis.mapping.MappedStatement ms)
        构建 mp 自用自动的 MappedStatement
        参数:
        ms - MappedStatement
        返回:
        MappedStatement
      • autoCountSql

        protected java.lang.String autoCountSql​(com.baomidou.mybatisplus.core.metadata.IPage<?> page,
                                                java.lang.String sql)
        获取自动优化的 countSql
        参数:
        page - 参数
        sql - sql
        返回:
        countSql
      • lowLevelCountSql

        protected java.lang.String lowLevelCountSql​(java.lang.String originalSql)
        无法进行count优化时,降级使用此方法
        参数:
        originalSql - 原始sql
        返回:
        countSql
      • concatOrderBy

        public java.lang.String concatOrderBy​(java.lang.String originalSql,
                                              java.util.List<com.baomidou.mybatisplus.core.metadata.OrderItem> orderList)
        查询SQL拼接Order By
        参数:
        originalSql - 需要拼接的SQL
        返回:
        ignore
      • addOrderByElements

        protected java.util.List<net.sf.jsqlparser.statement.select.OrderByElement> addOrderByElements​(java.util.List<com.baomidou.mybatisplus.core.metadata.OrderItem> orderList,
                                                                                                       java.util.List<net.sf.jsqlparser.statement.select.OrderByElement> orderByElements)
      • continuePage

        protected boolean continuePage​(com.baomidou.mybatisplus.core.metadata.IPage<?> page)
        count 查询之后,是否继续执行分页
        参数:
        page - 分页对象
        返回:
        是否
      • handlerLimit

        protected void handlerLimit​(com.baomidou.mybatisplus.core.metadata.IPage<?> page,
                                    java.lang.Long limit)
        处理超出分页条数限制,默认归为限制数
        参数:
        page - IPage
      • handlerOverflow

        protected void handlerOverflow​(com.baomidou.mybatisplus.core.metadata.IPage<?> page)
        处理页数溢出,默认设置为第一页
        参数:
        page - IPage
      • getLogger

        public org.apache.ibatis.logging.Log getLogger()
      • isOverflow

        public boolean isOverflow()
        溢出总页数后是否进行处理
      • getMaxLimit

        public java.lang.Long getMaxLimit()
        单页分页条数限制
      • getDbType

        public com.baomidou.mybatisplus.annotation.DbType getDbType()
        数据库类型

        查看 findIDialect(Executor) 逻辑

      • isOptimizeJoin

        public boolean isOptimizeJoin()
        生成 countSql 优化掉 join 现在只支持 left join
        从以下版本开始:
        3.4.2
      • setOverflow

        public void setOverflow​(boolean overflow)
        溢出总页数后是否进行处理
      • setMaxLimit

        public void setMaxLimit​(java.lang.Long maxLimit)
        单页分页条数限制
      • setDbType

        public void setDbType​(com.baomidou.mybatisplus.annotation.DbType dbType)
        数据库类型

        查看 findIDialect(Executor) 逻辑

      • setOptimizeJoin

        public void setOptimizeJoin​(boolean optimizeJoin)
        生成 countSql 优化掉 join 现在只支持 left join
        从以下版本开始:
        3.4.2
      • equals

        public boolean equals​(java.lang.Object o)
        覆盖:
        equals 在类中 java.lang.Object
      • canEqual

        protected boolean canEqual​(java.lang.Object other)
      • hashCode

        public int hashCode()
        覆盖:
        hashCode 在类中 java.lang.Object
      • toString

        public java.lang.String toString()
        覆盖:
        toString 在类中 java.lang.Object