PageHelper
Говоря о PageHelper, друзья, которые использовали Mybatis, могут быть не очень незнакомы.Как плагин для пейджинга, разработанный китайцами, он в основном удовлетворяет наши повседневные потребности. Однако, когда я захотел зайти в официальную документацию, чтобы посмотреть, как эта штука работает с Spring Boot, я нашел это:
Поэтому я провел ночь, изучая, как играть это разумно.
Быстрый старт
Если вы хотите быстро выполнить операцию подкачки в проекте Spring Boot, вам потребуется всего два шага:
импорт мавен
Здесь я импортировал последнюю официальную:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
использовать
// 只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询(Select)方法会被分页!!!!
PageHelper.startPage(1, 10);
return PageInfo.of(userService.findAll());
Правильно, нам нужно всего две строки кода, чтобы добиться желаемого эффекта разбиения по страницам.
Продвинутый геймплей
Если вы просто хотите просто использовать функцию пейджинга, то эта статья для вас здесь окончена, но в качествепрограммист, вас устроит тольконачальныйспособ играть? Нет! Ты не будешь! Так что смотрите вниз~
Из документации мы видим, что автор предоставляет нам множество параметров для настройки:
helperDialect
,offsetAsPageNum
,rowBoundsWithCount
,pageSizeZero
,reasonable
,params
,supportMethodsArguments
,autoRuntimeDialect
,closeConn
Подождите, мы можем получить более мощные эффекты, настроив эти свойства~
Здесь необходимо объяснить, что большинство онлайн-руководств позволяют нам настраивать в XML или коде.На самом деле, если вы используете Springboot, зачем вам смотреть дальше?Мы можем настроить его непосредственно в приложении файла конфигурации загрузки Spring. ЮМЛ:
pagehelper:
# dialect: ①
# 分页插件会自动检测当前的数据库链接,自动选择合适的分页方式(可以不设置)
helper-dialect: mysql
# 上面数据库设置后,下面的设置为true不会改变上面的结果(默认为true)
auto-dialect: true
page-size-zero: false # ②
reasonable: true # ③
# 默认值为 false,该参数对使用 RowBounds 作为分页参数时有效。(一般用不着)
offset-as-page-num: false
# 默认值为 false,RowBounds是否进行count查询(一般用不着)
row-bounds-with-count: false
#params: ④
#support-methods-arguments: 和params配合使用,具体可以看下面的讲解
# 默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页
auto-runtime-dialect: false # ⑤
# 与auto-runtime-dialect配合使用
close-conn: true
# 用于控制默认不带 count 查询的方法中,是否执行 count 查询,这里设置为true后,total会为-1
default-count: false
#dialect-alias: ⑥
①: будет использоваться по умолчаниюPageHelper
метод подкачки, если вы хотите реализовать свою собственную логику подкачки, вы можете реализоватьDialect(com.github.pagehelper.Dialect)
интерфейс, а затем настройте свойство как полное имя реализующего класса. (Здесь так играть не рекомендуется. Ведь вы пользовались чужими плагинами, так зачем заморачиваться?)
②: Значение по умолчанию — false.Если для этого параметра установлено значение true, если pageSize=0 или RowBounds.limit = 0, все результаты будут запрошены (эквивалентно отсутствию запроса на подкачку, но возвращаемый результат по-прежнему относится к типу страницы).
Здесь нужно сказать, что хотя все результаты возвращаются, действие count все равно выполняется, разработчик как-то заявил в тикете, что более поздняя версия исправит эту проблему.
После моего теста он еще не решен 🤔③: Законность, то есть механизм исправления ошибок, конфигурацияreasonable
заtrue
, то еслиpageNum <= 0
запросит первую страницу, еслиpageNum > pages
Последняя страница будет запрошена.
④: Для того, чтобы поддержатьstartPage(Object params)
метод, этот параметр добавляется для настройки сопоставления параметров, которое используется для получения значения от объекта в соответствии с именем свойства, которое можно настроитьpageNum
,pageSize
,count
,pageSizeZero
,reasonable
, значение по умолчанию используется, если сопоставление не настроено, значение по умолчанию равноpageNum=pageNum;
pageSize=pageSize;
count=countSql;
reasonable=reasonable;
pageSizeZero=pageSizeZero
.support-methods-arguments
Поддержка передачи параметров пейджинга через параметры интерфейса Mapper, значение по умолчаниюfalse
, плагин разбивки на страницы запустит метод запроса иззначение параметра, автоматически берет значение в соответствии с полем, настроенным в параметрах выше, и автоматически разбивает на страницы, когда найдено подходящее значение.
Приходите немножко 🌰:
@GetMapping("/page1")
public PageInfo<UserDO> findPage(HttpServletRequest request) {
// 直接将请求中含有的参数传给
PageHelper.startPage(request);
return PageInfo.of(userService.findAll());
}
/**
* 查询所有信息
* @return 人员列表
*/
@Select("SELECT * FROM user")
@Results({
@Result(property = "userName", column = "user_name"),
@Result(property = "password", column = "password")
})
List<UserDO> findAll();
/*****************************************************************/
//这个方法和上面的区别是直接将含有条件的请求传给了Mapper接口
@GetMapping("/page2")
public PageInfo<UserDO> findPage2(HttpServletRequest request) {
return PageInfo.of(userService.findPage(request));
}
//Mapper接口遇上一个的区别就是多了一个参数,SQL完全一致
@Select("SELECT * FROM user")
@Results({
@Result(property = "userName", column = "user_name"),
@Result(property = "password", column = "password")
})
List<UserDO> findPage(HttpServletRequest request);
⑤: значение по умолчаниюfalse
. Если установлено значение true, разрешает автоматическую идентификацию разбиения на страницы соответствующего диалекта на основе нескольких источников данных во время выполнения,
closeConn
: значение по умолчаниюtrue
. При использовании источника динамических данных во время выполнения или не установленномhelperDialect
Когда свойство автоматически получает тип базы данных, соединение с базой данных будет получено автоматически, и это свойство используется для указания, закрывать ли полученное соединение.true
выключено, установленоfalse
После этого полученное соединение не будет закрыто Настройка этого параметра зависит от выбранного вами источника данных.
⑥:dialect-alias
параметр, который позволяет настроить псевдоним пользовательской реализации, который можно использовать для автоматического получения соответствующей реализации в соответствии с URL-адресом JDBC, позволяя таким образом перезаписать существующую реализацию Пример конфигурации (несколько конфигураций разделены точкой с запятой ;):
pagehelper.dialect-alias=oracle=com.github.pagehelper.dialect.helper.OracleDialect
несколько разных способов игры
(Шепотом ВВ) Лямбда действительно хороша собой!
//1. offsetPage
PageHelper.offsetPage(1, 10);
return PageInfo.of(userService.findAll());
//2. Lambda
return PageHelper.startPage(1, 10).doSelectPageInfo(() -> userService.findAll());
Адрес источника:
Не забудьте нажать на звездочку, это, должно быть, самая большая мотивация для моего письма!
использованная литература
публика
Оригинал статьи, ограниченный стиль написания, недостаток знаний и знаний, если есть неточности в статье, сообщите пожалуйста.