Обработка 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 )