@Override
    public PageData<T> selectWithPageSizeByNotIn(int pageSize, int pageIndex, String condition, String notinColumnName, String orderByColumnName, SortTypeEnum sortType, Object[] parameterValues, String... columnNames) {
        if (StringExtension.isNullOrEmpty(notinColumnName)) {
            throw new NullPointerException("notinColumnName:请指定的筛选列名称,该参数为必须指定，且为当前表中合法的列名称");
        }

        if (!this.containWhere(condition)) {
            throw new WhereConditionException("condition：指定的条件,要求带SQL语句Where关键字的条件");
        }

        //设置默认分页参数
        if (pageSize < 1) {
            pageSize = 10;
        }
        if (pageIndex < 0) {
            pageIndex = 0;
        }

        //临时表大小
        int tempTableSize = pageIndex * pageSize;
        //获取筛选列
        String columns = this.getColumns(columnNames);

        //设置第五个格式化参数为去掉Where字符串
        String trimWhere = condition.isEmpty()
                ? ""
                : String.format("AND %s", condition.trim().substring(5));

        //设置OrderBy参数
        String orderBy = StringExtension.isNullOrEmpty(orderByColumnName)
                ? String.format("%1$s %2$s", notinColumnName, sortType.toString())
                : String.format("%1$s %2$s", orderByColumnName, sortType.toString());

        //分页获取数据库记录集的SQL语句
        StringBuilder sqlFormat = new StringBuilder();
        sqlFormat.append("SELECT %1$s ");
        sqlFormat.append("FROM %2$s ");
        sqlFormat.append("WHERE %3$s NOT IN ");
        sqlFormat.append("(SELECT %3$s FROM %2$s %5$s ORDER BY %7$s LIMIT %4$s) ");
        sqlFormat.append("%6$s ORDER BY %7$s LIMIT %8$s");

        String sqlCmd = String.format(sqlFormat.toString(), columns, this.tableName,
                notinColumnName, tempTableSize, condition, trimWhere, orderBy, pageSize);
        return this.getPageData(condition, parameterValues, sqlCmd, columnNames);
    }