深入了解MyBatis分頁(yè)機(jī)制
MyBatis分頁(yè)原理
在講解mybatis的分頁(yè)原理之前,我們先來看一下:內(nèi)存分頁(yè) vs. 數(shù)據(jù)庫(kù)分頁(yè)
- 內(nèi)存分頁(yè):查詢數(shù)據(jù)庫(kù)獲取全部數(shù)據(jù),然后在內(nèi)存中進(jìn)行分頁(yè)。這種方式簡(jiǎn)單但效率低下,當(dāng)數(shù)據(jù)量巨大時(shí)可能導(dǎo)致內(nèi)存溢出。
- 數(shù)據(jù)庫(kù)分頁(yè):利用數(shù)據(jù)庫(kù)的分頁(yè)功能(比如 MySQL 的 LIMIT 和 OFFSET),僅查詢當(dāng)前頁(yè)的數(shù)據(jù)。這種方式效率高,但需要編寫特定的 SQL。
現(xiàn)在我們?cè)倬唧w講MyBatis 的分頁(yè)方式。
MyBatis 支持兩種分頁(yè)方式:物理分頁(yè)和內(nèi)存分頁(yè)。但是在實(shí)際應(yīng)用中,博主比較推薦使用物理分頁(yè)。
- 物理分頁(yè):通過特定的 SQL 實(shí)現(xiàn),依賴數(shù)據(jù)庫(kù)的分頁(yè)功能。
- 內(nèi)存分頁(yè):雖然 MyBatis 支持,但不推薦在大數(shù)據(jù)量場(chǎng)景下使用。
MyBatis 分頁(yè)插件
為了實(shí)現(xiàn)物理分頁(yè),MyBatis 提供了分頁(yè)插件,如 PageHelper。這些插件可以自動(dòng)修改原始 SQL,添加分頁(yè)相關(guān)的語(yǔ)句。
如何使用 MyBatis 分頁(yè)插件
接下來我們講解一下如何使用 MyBatis 分頁(yè)插件 。
首先第一步肯定是引入依賴
先創(chuàng)建一個(gè) Maven 項(xiàng)目,引入 PageHelper 依賴:
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> </dependency>
然后配置 PageHelper
在 MyBatis 的配置文件(如 mybatis-config.xml)中,添加插件配置:
<plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="mysql"/> <!-- 根據(jù)實(shí)際數(shù)據(jù)庫(kù)選擇方言 --> <property name="reasonable" value="true"/> <!-- 支持接口參數(shù)中的 pageNum 和 pageSize 為 0 時(shí)使用默認(rèn)值 --> <property name="supportMethodsArguments" value="true"/> <!-- 支持通過 Mapper 接口參數(shù)來傳遞分頁(yè)參數(shù) --> <property name="params" value="count(countSql)"/> <!-- count 查詢的 SQL 參數(shù) --> </plugin> </plugins>
最后使用 PageHelper
在 Mapper 接口或 Service 層使用 PageHelper:
// 在查詢之前設(shè)置分頁(yè)參數(shù) PageHelper.startPage(pageNum, pageSize); List<User> users = userMapper.selectByExample(example); // 使用 PageInfo 包裝查詢結(jié)果,獲取分頁(yè)信息 PageInfo<User> pageInfo = new PageInfo<>(users, pageSize);
以博主之前做過的課設(shè)項(xiàng)目為例:
我們手上現(xiàn)在有一個(gè)UserMapper接口,用來查詢用戶數(shù)據(jù):
public interface UserMapper { List<User> selectAllUsers(); }
在Service層或Controller層中,我們這時(shí)候可以使用PageHelper來實(shí)現(xiàn)分頁(yè):
@Service public class UserService { @Autowired private UserMapper userMapper; public PageInfo<User> getUsers(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); // 啟動(dòng)分頁(yè) List<User> users = userMapper.selectAllUsers(); // 查詢用戶數(shù)據(jù) return new PageInfo<>(users); // 使用PageInfo包裝查詢結(jié)果,獲取分頁(yè)信息 } }
當(dāng)調(diào)用getUsers方法時(shí),PageHelper會(huì)自動(dòng)為selectAllUsers方法中的SQL添加分頁(yè)語(yǔ)句,從而只查詢當(dāng)前頁(yè)的數(shù)據(jù)。
前端可以根據(jù)返回的PageInfo對(duì)象獲取當(dāng)前頁(yè)的數(shù)據(jù)、總頁(yè)數(shù)、總記錄數(shù)等信息,并進(jìn)行相應(yīng)的展示。
文章到這里就先結(jié)束了,后續(xù)會(huì)繼續(xù)分享相關(guān)的知識(shí)點(diǎn)。
以上就是深入了解MyBatis分頁(yè)機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于MyBatis分頁(yè)機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot配置文件、多環(huán)境配置、讀取配置的4種實(shí)現(xiàn)方式
SpringBoot支持多種配置文件位置和格式,其中application.properties和application.yml是默認(rèn)加載的文件,配置文件可以根據(jù)環(huán)境通過spring.profiles.active屬性進(jìn)行區(qū)分,命令行參數(shù)具有最高優(yōu)先級(jí),可覆蓋其他所有配置2024-09-09