1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/selfly-sonsure-dumper

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
page-handler.md 4.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 13:43 e04b5c0

Обработка PageHandler и расширение

Обработка страниц осуществляется через PageHandler.

Эта часть заимствует идею Mybatis-PageHelper и частично его код.

Интерфейс определяется следующим образом:

public interface PageHandler {

    /**
     * Определяет, поддерживает ли текущая база данных разбиение на страницы
     *
     * @param dialect
     * @return
     */
    boolean support(String dialect);

    /**
     * Получает команду count на основе запроса
     *
     * @param command 
     * @param dialect the dialect
     * @return команда count
     */
    String getCountCommand(String command, String dialect);

    /**
     * Получает страницу команды на основе запроса и параметров разбиения на страницы
     *
     * @param command    the command
     * @param pagination the pagination
     * @param dialect    the dialect
     * @return страница команды
     */
    String getPageCommand(String command, Pagination pagination, String dialect);

}

Поскольку запросы count(*) в реляционных базах данных в основном одинаковы, абстрактный класс AbstractPageHandler реализует метод getCountCommand. При расширении достаточно унаследовать этот абстрактный класс.

Ниже приведён пример реализации разбиения на страницы для PostgreSQL:

public class PostgresqlPageHandler extends AbstractPageHandler {

    @Override
    public boolean support(String dialect) {
        return StringUtils.indexOfIgnoreCase(dialect, "postgresql") != -1;
    }

    @Override
    public String getPageCommand(String command, Pagination pagination, String dialect) {
        StringBuilder pageSql = new StringBuilder(200);
        pageSql.append(command);
        pageSql.append(" limit ");
        pageSql.append(pagination.getPageSize());
        pageSql.append(" offset ");
        pageSql.append(pagination.getBeginIndex());
        return pageSql.toString();
    }

}

Это очень просто. Затем его можно использовать, настроив в JdbcEngine:

<bean id="postgresqlPageHandler" class="com.sonsure.dumper.core.page.PostgresqlPageHandler"/>
<bean id="jdbcTemplateEngine" class="com.sonsure.dumper.springjdbc.config.JdbcTemplateEngineFactoryBean">
    <!-- ... -->
    <property name="pageHandler" ref="postgresqlPageHandler"/>

Также можно настроить его в NegotiatingPageHandler, чтобы использовать NegotiatingPageHandler единообразно:

<bean id="postgresqlPageHandler" class="com.sonsure.dumper.core.page.PostgresqlPageHandler"/>
<bean id="mysqlPageHandler" class="com.sonsure.dumper.core.page.MysqlPageHandler"/>
<bean id="oraclePageHandler" class="com.sonsure.dumper.core.page.OraclePageHandler"/>

<bean id="negotiatingPageHandler" class="com.sonsure.dumper.core.page.NegotiatingPageHandler">
    <property name="pageHandlers">
        <list>
            <ref bean="postgresqlPageHandler"/>
            <ref bean="mysqlPageHandler"/>
            <ref bean="oraclePageHandler"/>
        </list>
    </property>
<bean id="jdbcTemplateEngine" class="com.sonsure.dumper.springjdbc.config.JdbcTemplateEngineFactoryBean">
    <!-- ... -->
    <property name="pageHandler" ref="negotiatingPageHandler"/>

Примечание: MysqlPageHandler, OraclePageHandler и PostgresqlPageHandler уже реализованы и встроены в NegotiatingPageHandler. Их можно использовать напрямую или использовать NegotiatingPageHandler.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/selfly-sonsure-dumper.git
git@api.gitlife.ru:oschina-mirror/selfly-sonsure-dumper.git
oschina-mirror
selfly-sonsure-dumper
selfly-sonsure-dumper
master