Поскольку некоторые данные были удалены ранее, чтобы отразить эффект страничного запроса, лучше всего добавить некоторые данные.
Создайте в проекте класс конфигурации, добавьте плагин для пейджингового запроса в MybatisPlus и введите связанные классы.
Потому что разные базы данных,Ключевые слова, используемые для нумерации страниц, также различаются.,Поэтому вам нужно указать тип базы данных:DbType.MYSQL
。
Аннотации необходимо добавлять к классам и методам, иначе SpringBoot не будет их сканировать.
Добавляйте аннотации к именам классов @Configuration
,Добавляйте аннотации к методам @Bean
。
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConfigureUtil {
//Настраиваем плагин пейджинга
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
При выполнении запроса вы можете вызвать selectPage()
метод, который необходимо использовать Page объекты и QueryWrapper объект.
В объекте Страница вы можете указать номер текущей страницы, количество элементов на странице и другую информацию во время запроса по страницам. Если номер текущей страницы равен 0 или 1, результатом запроса будет содержимое страницы 1.
В объекте QueryWrapper вы можете указать условия запроса, которые используются так же, как и обычные запросы.
Например: запросите записи, содержание примечаний которых среди всех пользователей содержит слово «учитель»:
//Запрос страницы
@Test
public void selectUserByPage(){
Page<User> page = new Page<>(2, 2);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("remark", "учитель");
IPage<User> iPage = userMapper.selectPage(page, wrapper);
//Общее количество страниц
System.out.println(iPage.getPages());
//Общее количество элементов
System.out.println(iPage.getTotal());
//Количество элементов на странице
System.out.println(iPage.getSize());
//Набор результатов текущей страницы
System.out.println(iPage.getRecords());
//Номер текущей страницы
System.out.println(iPage.getCurrent());
}
Как вы можете видеть в консоли, фактически выполняются два запроса:
Первый раз — общее количество запросов;
Во второй раз нужно использовать ключевое слово limit для пейджингового запроса.
==> Preparing: SELECT COUNT(*) AS total FROM user WHERE (remark LIKE ?)
==> Parameters: %Учитель%(строка)
<== Columns: total
<== Row: 5
<== Total: 1
==> Preparing: SELECT id,username,gendar,remark FROM user WHERE (remark LIKE ?) LIMIT ?,?
==> Parameters: %Учитель%(строка), 2(Long), 2(Long)
<== Columns: id, username, gendar, remark
<== Row: 10, Чжан Сан, женский, учитель физкультуры
<== Row: 11, Лю Нэн, мужской, учитель речи
<== Total: 2
Вывод результата:
3
5
2
User{id=10, username = 'Чжан Сан', пол = 'женский', remark='учитель физкультуры'}, User{id=11, username = 'Лю Нэн', пол = 'мужской', remark='учитель речи'}
2
При запросе, selectMapsPage()
метод, который еще нужно использовать Page объекты и QueryWrapper объект.
и selectPage()
Разница в методе в том, что здесь Page Объект должен быть Page<Map<String , Object>>
,Дженерики должны быть Map<String , Object>。QueryWrapper Разницы в использовании предметов нет.
Результатом запроса также является IPage<Map<String, Object>>
объект родовых типов.
//Запрос страницы
@Test
public void selectUserByPage2(){
Page<Map<String , Object>> mapPage = new Page<>(2 , 2 );
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("remark", "учитель");
IPage<Map<String, Object>> iPage = userMapper.selectMapsPage(mapPage, wrapper);
//Общее количество страниц
System.out.println("Всего страниц: " + iPage.getPages());
//Общее количество элементов
System.out.println("Общее количество предметов: " + iPage.getTotal());
//Количество элементов на странице
System.out.println("Количество элементов на странице: " + iPage.getSize());
//Набор результатов текущей страницы
System.out.println("Набор результатов для текущей страницы: " + iPage.getRecords());
//Номер текущей страницы
System.out.println("Текущий номер страницы: " + iPage.getCurrent());
}
Как видно из вывода консоли, этот метод также выполняет два запроса:
==> Preparing: SELECT COUNT(*) AS total FROM user WHERE (remark LIKE ?)
==> Parameters: %Учитель%(строка)
<== Columns: total
<== Row: 5
<== Total: 1
==> Preparing: SELECT id,username,gendar,remark FROM user WHERE (remark LIKE ?) LIMIT ?,?
==> Parameters: %Учитель%(строка), 2(Long), 2(Long)
<== Columns: id, username, gendar, remark
<== Row: 10, Чжан Сан, женский, учитель физкультуры
<== Row: 11, Лю Нэн, мужской, учитель речи
<== Total: 2
Вывод результата:
Всего страниц: 3
Общее количество предметов: 5
Количество элементов на странице: 2
Набор результатов для текущей страницы: {gendar=женский, remark=учитель физкультуры, id=10, имя пользователя = Чжан Сан}, {gendar=мужской, remark=учитель речи, id=11, имя пользователя = Лю Нэн}
Текущий номер страницы: 2
В отличие от первого набора результатов запроса, поскольку получается карта, положения полей в наборе результатов не фиксированы.
Я участвую в третьем этапе специального тренировочного лагеря Tencent Technology Creation 2023 с эссе, получившими приз, и сформирую команду, которая разделит приз!