MyBatis-Plus 分頁(yè)插件使用示例
一、項(xiàng)目包結(jié)構(gòu)
src/main/java └─ com.neuedu.hisweb ├── config │ └── MybatisPlusConfig.java // 配置類(已提供) ├── controller │ └── UserController.java // 控制器 ├── entity │ └── User.java // 實(shí)體類 ├── mapper │ └── UserMapper.java // Mapper 接口 ├── service │ ├── UserService.java // Service 接口 │ └── impl │ └── UserServiceImpl.java // Service 實(shí)現(xiàn) └── HisWebApplication.java // 啟動(dòng)類
二、實(shí)體類 (User.java)
package com.neuedu.hisweb.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user") // 對(duì)應(yīng)數(shù)據(jù)庫(kù)表名
public class User {
@TableId // 主鍵注解
private Long id;
private String username;
private String password;
private Integer age;
private String email;
}三、Mapper 接口 (UserMapper.java)
package com.neuedu.hisweb.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.neuedu.hisweb.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 繼承 BaseMapper 后,自動(dòng)擁有 CRUD 方法
// 無(wú)需編寫(xiě) selectById, insert, update, delete 等方法
}四、Service 接口 (UserService.java)
package com.neuedu.hisweb.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.neuedu.hisweb.entity.User;
public interface UserService {
// 分頁(yè)查詢用戶列表
IPage<User> getUserPage(Page<User> page);
// 條件分頁(yè)查詢
IPage<User> getUserPageByCondition(Page<User> page, String username);
}五、Service 實(shí)現(xiàn) (UserServiceImpl.java)
package com.neuedu.hisweb.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.neuedu.hisweb.entity.User;
import com.neuedu.hisweb.mapper.UserMapper;
import com.neuedu.hisweb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Autowired
private UserMapper userMapper;
// 分頁(yè)查詢所有用戶
@Override
public IPage<User> getUserPage(Page<User> page) {
// Page 參數(shù)包含頁(yè)碼和每頁(yè)條數(shù)
// 調(diào)用 BaseMapper 的 selectPage 方法,自動(dòng)生成分頁(yè) SQL
return userMapper.selectPage(page, null); // null 表示無(wú)查詢條件
}
// 條件分頁(yè)查詢
@Override
public IPage<User> getUserPageByCondition(Page<User> page, String username) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("username", username); // 模糊查詢用戶名
// 帶條件的分頁(yè)查詢
return userMapper.selectPage(page, queryWrapper);
}
}六、Controller (UserController.java)
package com.neuedu.hisweb.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.neuedu.hisweb.entity.User;
import com.neuedu.hisweb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
// 分頁(yè)查詢用戶列表
@GetMapping("/page")
public IPage<User> getUserPage(
@RequestParam(defaultValue = "1") Integer pageNum, // 頁(yè)碼,默認(rèn)第1頁(yè)
@RequestParam(defaultValue = "10") Integer pageSize // 每頁(yè)條數(shù),默認(rèn)10條
) {
// 創(chuàng)建分頁(yè)對(duì)象
Page<User> page = new Page<>(pageNum, pageSize);
// 調(diào)用 Service 方法進(jìn)行分頁(yè)查詢
return userService.getUserPage(page);
}
// 條件分頁(yè)查詢
@GetMapping("/page/condition")
public IPage<User> getUserPageByCondition(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam(required = false) String username // 可選參數(shù):用戶名
) {
Page<User> page = new Page<>(pageNum, pageSize);
// 帶條件的分頁(yè)查詢
return userService.getUserPageByCondition(page, username);
}
}七、配置類 (MybatisPlusConfig.java)
package com.neuedu.hisweb.config;
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;
/**
* MyBatis-Plus 配置類
*/
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
// 創(chuàng)建 MyBatis-Plus 攔截器管理器
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加分頁(yè)插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
// 可以添加其他插件(如樂(lè)觀鎖、邏輯刪除等)
// interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}八、啟動(dòng)類 (HisWebApplication.java)
package com.neuedu.hisweb;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.neuedu.hisweb.mapper") // 掃描 Mapper 接口
public class HisWebApplication {
public static void main(String[] args) {
SpringApplication.run(HisWebApplication.class, args);
}
}九、使用示例
1. 訪問(wèn)分頁(yè)接口
通過(guò)瀏覽器或 Postman 訪問(wèn):
GET http://localhost:8080/api/users/page?pageNum=1&pageSize=5
2. 帶條件的分頁(yè)查詢
GET http://localhost:8080/api/users/page/condition?pageNum=1&pageSize=5&username=張
十、分頁(yè)插件工作原理
攔截器生效:
當(dāng)調(diào)用 selectPage() 方法時(shí),PaginationInnerInterceptor 會(huì)攔截 SQL 查詢。
自動(dòng)生成分頁(yè) SQL:
- 對(duì)于 MySQL,會(huì)自動(dòng)添加
LIMIT ? OFFSET ?。 - 對(duì)于 Oracle,會(huì)添加
ROWNUM相關(guān)的分頁(yè)語(yǔ)法。
返回分頁(yè)結(jié)果:
結(jié)果包含總記錄數(shù)、總頁(yè)數(shù)、當(dāng)前頁(yè)數(shù)據(jù)等信息:
{
"records": [ /* 當(dāng)前頁(yè)數(shù)據(jù) */ ],
"total": 100, // 總記錄數(shù)
"size": 10, // 每頁(yè)條數(shù)
"current": 1, // 當(dāng)前頁(yè)碼
"pages": 10 // 總頁(yè)數(shù)
}十一、配置說(shuō)明
分頁(yè)插件配置:
// 可自定義分頁(yè)插件參數(shù) PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(); paginationInterceptor.setMaxLimit(1000L); // 限制單頁(yè)最大條數(shù) paginationInterceptor.setOverflow(false); // 溢出總頁(yè)數(shù)后是否進(jìn)行處理 interceptor.addInnerInterceptor(paginationInterceptor);
多數(shù)據(jù)源配置:
若使用多數(shù)據(jù)源,需指定數(shù)據(jù)庫(kù)類型:
paginationInterceptor.setDbType(DbType.MYSQL);
我們可以輕松實(shí)現(xiàn)分頁(yè)查詢功能,無(wú)需手動(dòng)編寫(xiě)復(fù)雜的分頁(yè) SQL。
到此這篇關(guān)于MyBatis-Plus 分頁(yè)插件使用示例的文章就介紹到這了,更多相關(guān)MyBatis-Plus 分頁(yè)插件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot中使用mybatisplus自帶插件實(shí)現(xiàn)分頁(yè)的示例代碼
- 完美解決MybatisPlus插件分頁(yè)查詢不起作用總是查詢?nèi)繑?shù)據(jù)問(wèn)題
- 詳解MyBatisPlus如何實(shí)現(xiàn)分頁(yè)和查詢操作
- MybatisPlus分頁(yè)排序查詢字段帶有下劃線的坑及解決
- mybatisplus解除分頁(yè)限制的實(shí)現(xiàn)
- 詳解MybatisPlus3.4版本之后分頁(yè)插件的使用
- MyBatisPlus分頁(yè)時(shí)排序的實(shí)現(xiàn)
- MybatisPlus實(shí)現(xiàn)分頁(yè)查詢和動(dòng)態(tài)SQL查詢的示例代碼
相關(guān)文章
Java中List.sort()自定義排序規(guī)則幾種方式
Java中可通過(guò)Comparator匿名類、Lambda表達(dá)式、靜態(tài)方法、自定義對(duì)象及實(shí)現(xiàn)Comparable接口實(shí)現(xiàn)List排序,這篇文章主要介紹了Java中List.sort()自定義排序規(guī)則幾種方式,需要的朋友可以參考下2025-06-06
從基礎(chǔ)到實(shí)戰(zhàn)全解析Java加載Properties文件的六種方式
本文詳細(xì)介紹了Java中Properties文件的六種加載方式,每種方式都有其適用場(chǎng)景、實(shí)現(xiàn)步驟、優(yōu)缺點(diǎn)及最佳實(shí)踐,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-12-12
詳解SpringCloud新一代網(wǎng)關(guān)Gateway
SpringCloud Gateway是Spring Cloud的一個(gè)全新項(xiàng)目,Spring 5.0+ Spring Boot 2.0和Project Reactor等技術(shù)開(kāi)發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單有效的統(tǒng)一的API路由管理方式2021-06-06
intellij idea設(shè)置統(tǒng)一JavaDoc模板的方法詳解
這篇文章主要介紹了intellij idea設(shè)置統(tǒng)一JavaDoc模板的方法詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
Java?Bluetooth?藍(lán)牙通訊?BlueCove?掃描附近的藍(lán)牙設(shè)備(測(cè)試代碼)
BlueCove是一個(gè)開(kāi)源的藍(lán)牙協(xié)議棧實(shí)現(xiàn),旨在為Java開(kāi)發(fā)者提供一個(gè)全面的、易于使用的API,從而在應(yīng)用程序中實(shí)現(xiàn)藍(lán)牙功能,該項(xiàng)目支持多種操作系統(tǒng),這篇文章主要介紹了Java?Bluetooth?藍(lán)牙通訊?BlueCove?掃描附近的藍(lán)牙設(shè)備,需要的朋友可以參考下2025-01-01
springboot啟動(dòng)報(bào)錯(cuò)Failed to load class [java
這篇文章主要介紹了springboot啟動(dòng)報(bào)錯(cuò)Failed to load class [javax.servlet.Filter]的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2026-03-03
java.io.UnsupportedEncodingException異常的正確解決方法(親測(cè)有效!)
這篇文章主要給大家介紹了關(guān)于java.io.UnsupportedEncodingException異常的正確解決方法,文中介紹的辦法親測(cè)有效,java.io.UnsupportedEncodingException是Java編程語(yǔ)言中的一個(gè)異常類,表示指定的字符集不被支持,需要的朋友可以參考下2024-02-02
MybatisPlus BaseMapper 中的方法全部 Invalid bound statement (not f
這篇文章主要介紹了MybatisPlus BaseMapper 中的方法全部 Invalid bound statement (not found)的Error處理方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09

