欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis分頁(yè)插件PageHelper的使用與原理

 更新時(shí)間:2023年02月24日 10:50:47   作者:@每天都要敲代碼  
提到插件相信大家都知道,插件的存在主要是用來(lái)改變或者增強(qiáng)原有的功能,MyBatis中也一樣,下面這篇文章主要給大家介紹了關(guān)于Mybatis第三方PageHelper分頁(yè)插件的使用與原理,需要的朋友可以參考下

MyBatis使?PageHelper

1.limit分?

(1)概念:

①頁(yè)碼:pageNum(用戶會(huì)發(fā)送請(qǐng)求,攜帶頁(yè)碼pageNum給服務(wù)器)

②每頁(yè)顯示的記錄條數(shù):pageSize,例如:百度默認(rèn)的是每頁(yè)展示10條記錄

③實(shí)際上每一次在進(jìn)行分頁(yè)請(qǐng)求發(fā)送的時(shí)候,都是要發(fā)送兩個(gè)數(shù)據(jù):pageNum和pageSize給服務(wù)器

④實(shí)際上前端提交表單的數(shù)據(jù)格式應(yīng)如下:uri?pageNum=1&pageSize=10,后端調(diào)用request.getParameter方法獲取到對(duì)應(yīng)的頁(yè)碼和每頁(yè)顯示的記錄條數(shù)

(2)mysql當(dāng)中的分頁(yè)SQL應(yīng)該怎么寫(xiě)?

①使用limit關(guān)鍵字,語(yǔ)法格式:limit startIndex,pageSize

②第?個(gè)數(shù)字:startIndex(起始下標(biāo),下標(biāo)從0開(kāi)始)

③第?個(gè)數(shù)字:pageSize(每?顯示的記錄條數(shù))

④假設(shè)已知?碼pageNum,還有每?顯示的記錄條數(shù)pageSize,那么第?個(gè)數(shù)字是可以動(dòng)態(tài)的獲取的:startIndex = (pageNum - 1) * pageSize

(3)標(biāo)準(zhǔn)通?的mysql分?SQL:

select * 
from tableName ...... 
limit (pageNum - 1) * pageSize, pageSize

(4)使用limit關(guān)鍵字編寫(xiě)代碼進(jìn)行分頁(yè)

三兄弟之一:CarMapper接口,編寫(xiě)方法

package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface CarMapper {
    /**
     * 分頁(yè)查詢
     * @param startIndex 起始下標(biāo)
     * @param pageSize  每頁(yè)顯示的記錄條數(shù)
     * @return
     */
    List<Car> selectAllByPage(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize);
}

三兄弟之二:CarMapper.xml文件,編寫(xiě)sql語(yǔ)句

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper">
  <select id="selectAllByPage" resultType="Car" >
    select * from t_car limit #{startInde},#{pageSize}
  </select>
</mapper>

三兄弟之三:CarMappeTest類,用來(lái)編寫(xiě)測(cè)試類

package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class CarMapperTest {
    @Test
    public void testSelectAllByPage(){
        // 應(yīng)該是從前端獲取到頁(yè)碼
        int pageNum = 2;
        // 應(yīng)該是從前端獲取到每頁(yè)顯示的條數(shù)
        int pageSize = 2;
        // 起始下標(biāo)
        int startIndex = (pageNum-1)*pageSize;
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        List<Car> cars = mapper.selectAllByPage(startIndex, pageSize);
        cars.forEach(car -> System.out.println(car));
        sqlSession.close();
    }
}

執(zhí)行結(jié)果:

對(duì)應(yīng)的是數(shù)據(jù)庫(kù)表中:起始下標(biāo)為2開(kāi)始的后兩條數(shù)據(jù)(下標(biāo)從0開(kāi)始)

(5)其實(shí)獲取數(shù)據(jù)并不難,難的是獲取分?相關(guān)的數(shù)據(jù)?較難(例如:總記錄條數(shù)、是否有上/下一頁(yè)、分頁(yè)的導(dǎo)航顯示多少個(gè));這些可以借助mybatis的PageHelper插件。

2.PageHelper插件

使?PageHelper插件進(jìn)?分?,更加的便捷!

第一步:pom.xml中引入依賴

<dependency>
     <groupId>com.github.pagehelper</groupId>
     <artifactId>pagehelper</artifactId>
     <version>5.3.1</version>
</dependency>

第二步:在mybatis-config.xml?件中配置插件

<!--mybatis分頁(yè)的攔截器-->
<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

第三步:編寫(xiě)Java代碼

三兄弟之一:CarMapper接口,編寫(xiě)方法

package com.bjpowernode.mybatis.mapper;
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface CarMapper {
    /**
     * 查詢所有的Car,通過(guò)分頁(yè)查詢插件PageHelper完成
     * @return
     */
    List<Car> selectAll();
}

三兄弟之二:CarMapper.xml文件,編寫(xiě)sql語(yǔ)句

使用了分頁(yè)插件PageHelper就不需要使用limit關(guān)鍵字了,直接正常查詢即可!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bjpowernode.mybatis.mapper.CarMapper"> 
  <select id="selectAll" resultType="Car">
      select * from t_car
  </select>
</mapper>

三兄弟之三:CarMappeTest類,用來(lái)編寫(xiě)測(cè)試類

注:在執(zhí)行DQL語(yǔ)句之前,開(kāi)啟分頁(yè)功能!

調(diào)用PageHelper的startPage(pageNum,pageSize)方法:

①第一個(gè)參數(shù)是頁(yè)碼pageNum

②第二個(gè)參數(shù)還是每頁(yè)顯示的記錄條數(shù)pageSize

package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class CarMapperTest {
    @Test
    public void testSelectAll(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        // 在執(zhí)行DQL語(yǔ)句之前,開(kāi)啟分頁(yè)
        int pageNum = 2; // 第二頁(yè)
        int pageSize = 3; // 每頁(yè)顯示的條數(shù)
        PageHelper.startPage(pageNum,pageSize);
        List<Car> cars = mapper.selectAll();
        cars.forEach(car -> System.out.println(car));
        sqlSession.close();
    }
}

執(zhí)行結(jié)果:實(shí)際上PageHelper是在SQL語(yǔ)句后面自動(dòng)加上了limit關(guān)鍵字

第2頁(yè),每頁(yè)顯示的條數(shù)是3,對(duì)應(yīng)的數(shù)據(jù)庫(kù)表中的數(shù)據(jù)就是:

第四步:獲取PageInfo對(duì)象

關(guān)鍵點(diǎn):

①在查詢語(yǔ)句之前,開(kāi)啟分?功能。

②在查詢語(yǔ)句之后,封裝PageInfo對(duì)象(PageInfo對(duì)象將來(lái)會(huì)存儲(chǔ)到request域當(dāng)中。在??上展示)

package com.bjpowernode.mybatis.test;
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class CarMapperTest {
    @Test
    public void testSelectAll(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        // 1. 在執(zhí)行DQL語(yǔ)句之前,開(kāi)啟分頁(yè)
        int pageNum = 1; // 第一頁(yè)
        int pageSize = 3; // 每頁(yè)顯示的條數(shù)
        PageHelper.startPage(pageNum,pageSize);
        // 2. 執(zhí)行SQL語(yǔ)句
        List<Car> cars = mapper.selectAll();
        // 3. 執(zhí)行DQL之后,封裝PageInfo對(duì)象,new PageInfo對(duì)象
        // 第二個(gè)參數(shù)就是分頁(yè)導(dǎo)航的卡片個(gè)數(shù)
        PageInfo<Car> carPageInfo = new PageInfo<>(cars, 3);
        System.out.println(carPageInfo);
        sqlSession.close();
    }
}

執(zhí)行結(jié)果:

列舉幾個(gè)常用的屬性:

①pageNum-頁(yè)碼, pageSize-每頁(yè)顯示的記錄, size=3, startRow-從第幾條數(shù)據(jù)開(kāi)始, endRow-從第幾條數(shù)據(jù)結(jié)束, total-總記錄條數(shù), pages-頁(yè)數(shù),

②prePage-上一頁(yè)的頁(yè)碼, nextPage-下一頁(yè)的頁(yè)碼, isFirstPage-,是否是第一頁(yè) isLastPage-是否是最后一頁(yè), hasPreviousPage-有沒(méi)有上一頁(yè), hasNextPage-有沒(méi)有下一頁(yè)

③navigatePages-導(dǎo)航頁(yè)碼, navigateFirstPage-導(dǎo)航第一頁(yè)是幾, navigateLastPage-導(dǎo)航最后一頁(yè)是幾, navigatepageNums-存在數(shù)據(jù)的導(dǎo)航頁(yè)

怎么用?

在javaweb當(dāng)中,代用request.setAttribute("pageInfo",carPageInfo)方法,把數(shù)據(jù)放到request域當(dāng)中;然后從request域當(dāng)中取出分頁(yè)的信息,在前端進(jìn)行展示!

到此這篇關(guān)于MyBatis分頁(yè)插件PageHelper的使用與原理的文章就介紹到這了,更多相關(guān)MyBatis PageHelper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?自定義propertyEditor的示例代碼

    Spring?自定義propertyEditor的示例代碼

    這篇文章主要介紹了Spring?自定義propertyEditor的示例代碼,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Java從List中刪除元素的幾種方式小結(jié)

    Java從List中刪除元素的幾種方式小結(jié)

    在Java中,List 接口提供了一個(gè) remove(Object o) 方法來(lái)移除列表中與給定對(duì)象相等的第一個(gè)元素,然而,直接使用這個(gè)方法來(lái)刪除列表中的元素有時(shí)并不是最優(yōu)的選擇,主要原因包括效率和同步性問(wèn)題,本文介紹了Java從List中刪除元素的幾種方式,需要的朋友可以參考下
    2024-08-08
  • 淺談spring的重試機(jī)制無(wú)效@Retryable@EnableRetry

    淺談spring的重試機(jī)制無(wú)效@Retryable@EnableRetry

    這篇文章主要介紹了淺談spring的重試機(jī)制無(wú)效@Retryable@EnableRetry,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • SpringBoot-application.yml多環(huán)境配置詳解

    SpringBoot-application.yml多環(huán)境配置詳解

    本文主要介紹了SpringBoot-application.yml多環(huán)境配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 詳解SpringBoot是如何保證接口安全的

    詳解SpringBoot是如何保證接口安全的

    對(duì)于互聯(lián)網(wǎng)來(lái)說(shuō),只要你系統(tǒng)的接口會(huì)暴露在外網(wǎng),就避免不了接口安全問(wèn)題。?如果你的接口在外網(wǎng)裸奔,只要讓黑客知道接口的地址和參數(shù)就可以調(diào)用,那簡(jiǎn)直就是災(zāi)難。這篇文章主要介紹了SpringBoot保證接口安全的方法,需要的可以參考一下
    2023-02-02
  • 一篇文章帶你了解JAVA結(jié)構(gòu)化編程詳情

    一篇文章帶你了解JAVA結(jié)構(gòu)化編程詳情

    下面小編就為大家?guī)?lái)一篇講解JAVA結(jié)構(gòu)化編程的文章。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09
  • SpringCloudGateway?Nacos?GitlabRunner全自動(dòng)灰度服務(wù)搭建發(fā)布

    SpringCloudGateway?Nacos?GitlabRunner全自動(dòng)灰度服務(wù)搭建發(fā)布

    這篇文章主要為大家介紹了SpringCloudGateway?Nacos?GitlabRunner全自動(dòng)灰度服務(wù)搭建和發(fā)布實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Java string類型轉(zhuǎn)換成map代碼實(shí)例

    Java string類型轉(zhuǎn)換成map代碼實(shí)例

    這篇文章主要介紹了Java string類型轉(zhuǎn)換成map代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Mybatis Generator 獲取不到字段注釋的解決

    Mybatis Generator 獲取不到字段注釋的解決

    這篇文章主要介紹了Mybatis Generator 獲取不到字段注釋的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Automapper實(shí)現(xiàn)自動(dòng)映射的實(shí)例代碼

    Automapper實(shí)現(xiàn)自動(dòng)映射的實(shí)例代碼

    這篇文章主要介紹了Automapper實(shí)現(xiàn)自動(dòng)映射的實(shí)例代碼,需要的朋友可以參考下
    2017-09-09

最新評(píng)論