最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot結(jié)合mybatis-plus實(shí)現(xiàn)分頁的項(xiàng)目實(shí)踐

 更新時(shí)間:2023年06月21日 15:21:21   作者:白白白鯉魚  
本文主要介紹了SpringBoot結(jié)合mybatis-plus實(shí)現(xiàn)分頁的項(xiàng)目實(shí)踐,主要基于MyBatis-Plus 自帶的分頁插件 PaginationInterceptor,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、分頁的原理        

要實(shí)現(xiàn)分頁功能方法有很多,但最基本的實(shí)現(xiàn)原理都差不多,所以在實(shí)現(xiàn)功能之前要先把原理搞明白。正如刪除有 “邏輯刪除”  和 “物理刪除" 之分,分頁也有 “邏輯分頁” 和 “物理分頁”;

1、邏輯分頁:邏輯分頁依賴于代碼。(Mybatis自帶的分頁插件就是邏輯分頁)
邏輯分頁是先查詢出所有的數(shù)據(jù)(只需要訪問一次數(shù)據(jù)庫),再根據(jù)代碼塊的所需  (你需要拿到第幾頁,每頁幾條的數(shù)據(jù)) 篩選出合適的數(shù)據(jù)進(jìn)行分頁。
2、物理分頁:物理分頁依賴于數(shù)據(jù)庫。(更側(cè)重于sql語句)
MySQL數(shù)據(jù)庫提供的分頁關(guān)鍵字"LIMIT ",程序員只需要編寫帶有關(guān)鍵字的SQL語句,數(shù)據(jù)庫返回的數(shù)據(jù)就是分頁結(jié)果。(每次都要訪問數(shù)據(jù)庫,對(duì)數(shù)據(jù)庫造成的負(fù)擔(dān)大)

但我們一般不推薦使用邏輯分頁,而使用物理分頁較多,因?yàn)?nbsp; “邏輯分頁一次性將所有的數(shù)據(jù)讀取至內(nèi)存中,占用了較大的內(nèi)存空間;物理分頁每次只讀取所需的數(shù)據(jù),占用內(nèi)存比較小” 。而在使用物理分頁的時(shí)候,就要考慮到limit的用法。 

mysql的limit用法、邏輯分頁和物理分頁

詳解Mybatis-Plus中分頁插件PaginationInterceptor

二、利用 mybatis-plus 自帶分頁插件Interceptor實(shí)現(xiàn)分頁功能

MyBatis-Plus 自帶的分頁插件 PaginationInterceptor 就是基于物理分頁實(shí)現(xiàn)的。該插件會(huì)攔截 SQL 執(zhí)行過程中的分頁參數(shù)(如 Page 對(duì)象),并根據(jù)傳入的分頁參數(shù)自動(dòng)生成對(duì)應(yīng)的 LIMIT 或者 ROWS 等分頁語句,從而達(dá)到物理分頁的效果。同時(shí),PaginationInterceptor 還支持多租戶和動(dòng)態(tài)表名等功能。需要注意的是,如果查詢條件中包含了 GROUP BY 子句,物理分頁可能會(huì)出現(xiàn)問題,因?yàn)?LIMIT 或者 ROWS 可能會(huì)影響 GROUP BY 的結(jié)果。如果需要進(jìn)行分組查詢,建議使用邏輯分頁或者在應(yīng)用層手動(dòng)處理分頁結(jié)果。

下面演示按照 “性別” 進(jìn)行分頁,以下是具體步驟:

1、在pom.xml文件中添加依賴:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>

2、在配置文件application.properties或application.yml中進(jìn)行PageHelper的配置:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
server:
  port: 9090
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  # 控制臺(tái)打印sql語句
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3、創(chuàng)建測試數(shù)據(jù)庫表

create table user
(
	id int(20) auto_increment comment 'id',
	username varchar(20) null comment '用戶名',
	gender tinyint null comment '''0未知 1男 2女',
	password varchar(32) null comment '密碼',
	age int(4) null comment '年齡',
	create_time datetime null comment '創(chuàng)建時(shí)間',
	constraint user_pk
	primary key (id)
)
comment '測試用戶表';

 

 4、創(chuàng)建對(duì)應(yīng)測試實(shí)體類

@Data
@TableName(value = "user")
public class UserEntity{
    /**
     * id
     */
    @TableId
    private Long id;
    /**
     * 用戶名
     */
    private String username;
    /**
     * 密碼
     */
    private String password;
    /**
     * 0未知 1男 2女
     */
    private Integer gender;
    /**
     * 年齡
     */
    private Integer age;
}

5、設(shè)置配置類

@Configuration
public class MybatisPlusConfig{
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        paginationInnerInterceptor.setOptimizeJoin(true);
        paginationInnerInterceptor.setDbType(DbType.MYSQL);
        paginationInnerInterceptor.setOverflow(true);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor = new OptimisticLockerInnerInterceptor();
        interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor);
        return interceptor;
    }
}

6、 設(shè)置xml文件(針對(duì)按條件的復(fù)雜條件分頁情況)

<?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.example.demoutils.easyexcel.mapper.UserMapper">
    <sql id = "entity">
        a.id,a.username,a.password,a.gender,a.age,a.create_time
    </sql>
    <select id="selectUserByGender" resultType="com.example.demoutils.easyexcel.entity.UserEntity">
        select <include refid="entity"/> from user a
        <where>
            <if test="gender != null">
                and a.gender = #{gender}
            </if>
        </where>
    </select>
</mapper>

7、設(shè)置mapper 文件

8、設(shè)置 service 層文件(不用再寫service實(shí)現(xiàn)層了,一個(gè)搞定,當(dāng)然你分開寫也可以)

 9、設(shè)置 controller 層文件

 10、運(yùn)行結(jié)果

三、需要注意的地方:

MyBatis-Plus 中的 Page 和 IPage 接口都是用于封裝分頁參數(shù)和返回分頁結(jié)果的。它們的主要區(qū)別在于 Page 是 IPage 的實(shí)現(xiàn)類,而 IPage 是一個(gè)更加抽象的分頁接口。

具體來說,IPage 接口是對(duì)分頁參數(shù)進(jìn)行抽象的接口,它包含了以下幾個(gè)方法:

  • getCurrent():獲取當(dāng)前頁碼
  • getSize():獲取每頁顯示的記錄數(shù)
  • getTotal():獲取總記錄數(shù)
  • getRecords():獲取當(dāng)前頁的結(jié)果集
  • setRecords(List<T> records):設(shè)置當(dāng)前頁的結(jié)果集
  • setTotal(long total):設(shè)置總記錄數(shù)

而 Page 類則是 IPage 接口的默認(rèn)實(shí)現(xiàn)類,它的構(gòu)造函數(shù)可以傳入當(dāng)前頁碼和每頁顯示的記錄數(shù)等參數(shù),并且還包含了一些方便進(jìn)行物理分頁操作的方法,如:

  • setAsc(String... ascs):設(shè)置按照哪些字段升序排列
  • setDesc(String... descs):設(shè)置按照哪些字段降序排列
  • convert(Function<? super T, ? extends U> mapper):轉(zhuǎn)換當(dāng)前頁的結(jié)果集
  • optimizeCountSql(boolean isOptimize):是否啟用 count sql 最優(yōu)化(默認(rèn) true)
  • optimizeJoin(boolean isOptimize):是否為 join 語句 count 優(yōu)化(默認(rèn) false)

因此,如果只需要進(jìn)行簡單的物理分頁操作,可以直接使用 Page 類,而如果需要對(duì)分頁參數(shù)進(jìn)行更多的自定義操作,也可以使用 IPage 接口。

如剛才的例子換用 Page 接口 也是一樣的

 到此這篇關(guān)于SpringBoot結(jié)合mybatis-plus實(shí)現(xiàn)分頁的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)SpringBoot mybatis-plus分頁內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解java的值傳遞、地址傳遞、引用傳遞

    詳解java的值傳遞、地址傳遞、引用傳遞

    這篇文章主要介紹了詳解java的值傳遞、地址傳遞、引用傳遞的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Spring Boot實(shí)現(xiàn)圖片上傳/加水印一把梭操作實(shí)例代碼

    Spring Boot實(shí)現(xiàn)圖片上傳/加水印一把梭操作實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Spring Boot實(shí)現(xiàn)圖片上傳/加水印一把梭操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Java中將bean放入Spring容器中的幾種方式詳解

    Java中將bean放入Spring容器中的幾種方式詳解

    這篇文章主要介紹了Java中將bean放入Spring容器中的幾種方式詳解,在Spring框架中,有多種方式可以將Bean(即對(duì)象)放入Spring容器中,今天我們就來詳細(xì)說一下這幾種方式,需要的朋友可以參考下
    2023-07-07
  • 如何解決報(bào)錯(cuò):java.net.BindException:無法指定被請(qǐng)求的地址問題

    如何解決報(bào)錯(cuò):java.net.BindException:無法指定被請(qǐng)求的地址問題

    在Linux虛擬機(jī)上安裝并啟動(dòng)Tomcat時(shí)遇到啟動(dòng)失敗的問題,通過檢查端口及配置文件未發(fā)現(xiàn)異常,后發(fā)現(xiàn)/etc/hosts文件中缺少localhost的映射,添加后重啟Tomcat成功,Tomcat啟動(dòng)時(shí)會(huì)檢查localhost的IP映射,缺失或錯(cuò)誤都可能導(dǎo)致啟動(dòng)失敗
    2024-10-10
  • Springmvc異常映射2種實(shí)現(xiàn)方法

    Springmvc異常映射2種實(shí)現(xiàn)方法

    這篇文章主要介紹了Springmvc異常映射2種實(shí)現(xiàn)方法以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。,需要的朋友可以參考下
    2020-05-05
  • 使用Jackson反序列化遇到的問題及解決

    使用Jackson反序列化遇到的問題及解決

    這篇文章主要介紹了使用Jackson反序列化遇到的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springBoot接入阿里云oss的實(shí)現(xiàn)步驟

    springBoot接入阿里云oss的實(shí)現(xiàn)步驟

    這篇文章主要介紹了springBoot接入阿里云oss的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java使用JDBC驅(qū)動(dòng)連接MySQL數(shù)據(jù)庫

    Java使用JDBC驅(qū)動(dòng)連接MySQL數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了Java使用JDBC驅(qū)動(dòng)連接MySQL數(shù)據(jù)庫的具體步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • java中如何實(shí)現(xiàn)對(duì)類的對(duì)象進(jìn)行排序

    java中如何實(shí)現(xiàn)對(duì)類的對(duì)象進(jìn)行排序

    在本篇文章里小編給各位整理一篇關(guān)于java中如何實(shí)現(xiàn)對(duì)類的對(duì)象進(jìn)行排序知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • SpringMVC中解決@ResponseBody注解返回中文亂碼問題

    SpringMVC中解決@ResponseBody注解返回中文亂碼問題

    這篇文章主要介紹了SpringMVC中解決@ResponseBody注解返回中文亂碼問題, 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04

最新評(píng)論

平昌县| 荣成市| 偃师市| 乌兰县| 揭西县| 玉林市| 营山县| 华蓥市| 沭阳县| 嘉义市| 内江市| 英超| 南江县| 偃师市| 兴仁县| 高邮市| 麻栗坡县| 贵阳市| 于田县| 迁西县| 长阳| 漳浦县| 嘉鱼县| 镇巴县| 津南区| 奎屯市| 思茅市| 莱西市| 剑河县| 攀枝花市| 水城县| 九龙坡区| 蒙自县| 沁阳市| 台北市| 安多县| 黄平县| 伊金霍洛旗| 嘉禾县| 甘谷县| 阳谷县|