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

springboot整合mybatis分頁攔截器的問題小結(jié)

 更新時間:2021年07月25日 12:53:56   作者:貝塔-突突  
springboot整合mybatis分頁攔截器,分頁攔截實際上就是獲取sql后將sql拼接limit,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

簡介

又到了吹水時間,是這樣的,今天開發(fā)時想將自己寫好的代碼拿來優(yōu)化,因為不想在開發(fā)服弄,怕搞壞了到時候GIT到生產(chǎn)服一大堆問題,然后把它分離到我輪子(工具)項目上,最后運(yùn)行后發(fā)現(xiàn)我獲取List的時候很卡至少10秒,我驚了平時也就我的正常版本是800ms左右(不要看它很久,因為數(shù)據(jù)量很大,也很正常。),前提是我也知道很慢,就等的確需要優(yōu)化時,我在放出我優(yōu)化的plus版本,回到10秒哪里,最開始我剛剛接到這個app項目時,在我用 PageHelper.startPage(page, num);(分頁),還沒等查到的數(shù)據(jù)封裝(PageInfo)就已經(jīng)分好頁了,現(xiàn)在換到輪子上就發(fā)現(xiàn)了這個問題,它沒有幫我將limit拼接到sql后面,導(dǎo)致我獲取全部,再PageInfo分頁,數(shù)據(jù)量龐大導(dǎo)致很卡,最后…

10秒:

在這里插入圖片描述

正常的:

在這里插入圖片描述

springboot整合mybatis分頁攔截器

分頁攔截實際上就是獲取sql后將sql拼接limit

pom.xml

   <!-- 引入分頁插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
         <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>

yml

spring:
  application:
    name: spring-cloud-dynamic
  datasource:
    #類型
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/f2f?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: 

    initial-size: 2
    max-idle: 10
    min-idle: 1
    max-wait: 60000
    max-active: 20 #最大空閑連接數(shù)
    #多久進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接
    time-between-eviction-tuns-millis: 60000

MybatisConfig

/**
 * @author lanys
 * @Description:
 * @date 23/7/2021 下午8:38
 */

@Configuration
@EnableTransactionManagement
@PropertySource(value = "classpath:application.yml", ignoreResourceNotFound = true)
public class MybatisConfig implements TransactionManagementConfigurer {

    @Value("${mybatis.mapper-locations}")
    private String mapper;

    @Value("${mybatis.type-aliases-package}")
    private String aliases;

    @Autowired
    private DataSource dataSource;

    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        // 設(shè)置數(shù)據(jù)源
        bean.setDataSource(dataSource);
        // 設(shè)置xml
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapper));
        // 設(shè)置別名
        bean.setTypeAliasesPackage(aliases);
        // 添加分頁插件
        bean.setPlugins(new Interceptor[]{pageInterceptor()});
        bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
        return bean.getObject();
    }

    /**
     * 分頁攔截器
     * @return
     */
    private PageInterceptor pageInterceptor() {
        PageInterceptor pageInterceptor = new PageInterceptor();
        // 詳見 com.github.pagehelper.page.PageParams
        Properties p = new Properties();
        // RowBounds是否進(jìn)行count查詢 - 默認(rèn)不查詢
        p.setProperty("rowBoundsWithCount", "true");
        // 當(dāng)設(shè)置為true的時候,如果page size設(shè)置為0(或RowBounds的limit=0),就不執(zhí)行分頁,返回全部結(jié)果
        p.setProperty("pageSizeZero", "true");
        // 分頁合理化
        p.setProperty("reasonable", "false");
        // 是否支持接口參數(shù)來傳遞分頁參數(shù),默認(rèn)false
        p.setProperty("supportMethodsArguments", "true");
        // 設(shè)置數(shù)據(jù)庫方言 , 也可以不設(shè)置,會動態(tài)獲取
        p.setProperty("helperDialect", "mysql");
        pageInterceptor.setProperties(p);
        return pageInterceptor;
    }

    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }
}

測試

自己的其中代碼

/**
     * 關(guān)注列表
     * @param userId
     * @param page
     * @param size
     * @return
     */
    @Override
    public List<DynamicInfo> focusList(Long userId, Integer page, Integer size) {
        PageHelper.startPage(page, size);

        List<DynamicInfo> listByUserId = new ArrayList<>();
        try {
            //獲取自己關(guān)注列表
            listByUserId = this.dynamicReleaseMapper.getListFocusId(userId);
            if (listByUserId == null || listByUserId.size() == 0){
                return listByUserId;
            }
            //List<DynamicInfo> listByUserId = this.dynamicReleaseMapper.getListFocusId(userId).stream().filter(x->(x.getIsPicture()!=2 && x.getIsVideo() !=2)||(x.getIsPicture()==2 && x.getIsVideo() !=2)||(x.getIsPicture()!=2 && x.getIsVideo() ==2)).collect(Collectors.toList());
            publicGetDynamicInfo(userId,listByUserId);
            //}
            log.info("-------獲取關(guān)注列表-------");
            return listByUserId;
        } catch (Exception e) {
            log.error("獲取關(guān)注列表異常",e);
        }
        return listByUserId;
    }

想分頁要加 PageHelper.startPage(page, size);,否則會默認(rèn)不分頁,也可以自己加limit.

結(jié)果(sql語句很長截取一部分):

GROUP BY id ORDER BY create_time desc LIMIT ? 

總結(jié)

這代碼是最后發(fā)現(xiàn)不對后,問公司大佬才懂,瞬間學(xué)到了,可能有人會問,這有什么好處嗎?
優(yōu)點(自己的想法):

1. 直接在數(shù)據(jù)庫過濾,少了很多處理。為什么?因為如果你先查出全部在進(jìn)行封裝分頁,看不出什么問題。但是如果你直接獲取后,還要其他處理,比如一個動態(tài),你要獲取最新的動態(tài),動態(tài)需要圖片,視頻,標(biāo)簽,地址等,這一系列獲取,如果獲取到的動態(tài)很少還好,如果很多,那個速度自己都覺得可怕(慢)。
2. 運(yùn)行速度快很多,在開發(fā)中,盡量減少訪問數(shù)據(jù)庫來獲取數(shù)據(jù)。
3. 省事,有些是在sql后面自己加limit,但是sql語句很多時,也很繁瑣

缺點:
看個人需求,看合不合適

到此這篇關(guān)于springboot整合mybatis攔截器分頁的文章就介紹到這了,更多相關(guān)springboot整合mybatis分頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中do-while循環(huán)的使用方法及注意事項詳解

    Java中do-while循環(huán)的使用方法及注意事項詳解

    這篇文章主要介紹了Java中do-while循環(huán)的使用方法及注意事項的相關(guān)資料,在Java編程中,do-while循環(huán)是一種基本的循環(huán)控制結(jié)構(gòu),它至少執(zhí)行一次循環(huán)體,然后根據(jù)條件判斷是否繼續(xù),文中將用法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • Jmeter使用接口傳遞數(shù)據(jù)過程圖解

    Jmeter使用接口傳遞數(shù)據(jù)過程圖解

    這篇文章主要介紹了Jmeter使用接口傳遞數(shù)據(jù)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Java Process類的詳解及實例代碼

    Java Process類的詳解及實例代碼

    這篇文章主要介紹了Java Process類的詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • SpringBoot中優(yōu)化Undertow性能的方法總結(jié)

    SpringBoot中優(yōu)化Undertow性能的方法總結(jié)

    Undertow是一個采用 Java 開發(fā)的靈活的高性能Web服務(wù)器,提供包括阻塞和基于NIO的非堵塞機(jī)制,本文將給大家介紹SpringBoot中優(yōu)化Undertow性能的方法,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-08-08
  • http協(xié)議進(jìn)階之Transfer-Encoding和HttpCore實現(xiàn)詳解

    http協(xié)議進(jìn)階之Transfer-Encoding和HttpCore實現(xiàn)詳解

    這篇文章主要給大家介紹了http協(xié)議之Transfer-Encoding和HttpCore實現(xiàn)的相關(guān)資料,文中介紹的非常詳細(xì),相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • java有界類型參數(shù)的實例用法

    java有界類型參數(shù)的實例用法

    小編給大家整理了一篇關(guān)于java有界類型參數(shù)的使用的相關(guān)文章及擴(kuò)展實例內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-07-07
  • 簡單談?wù)刯ava的異常處理(Try Catch Finally)

    簡單談?wù)刯ava的異常處理(Try Catch Finally)

    在程序設(shè)計中,進(jìn)行異常處理是非常關(guān)鍵和重要的一部分。一個程序的異常處理框架的好壞直接影響到整個項目的代碼質(zhì)量以及后期維護(hù)成本和難度。
    2016-03-03
  • IDEA在Maven項目中使用本地jar包的方法

    IDEA在Maven項目中使用本地jar包的方法

    我們在拿到舊項目的時候,經(jīng)常會遇到一種情況,就是這個項目的maven中依賴了一個本地的jar包,這種情況就需要引入這個jar包,所以本文給大家介紹了IDEA在Maven項目中使用本地jar包的方法,需要的朋友可以參考下
    2024-04-04
  • Java BeanDefination接口詳細(xì)講解

    Java BeanDefination接口詳細(xì)講解

    BeanDefinition是spring里面bean的一個建模對象,就相當(dāng)于class對象是普通java對象的建模對象一樣??赡茉趕pring作用的各種業(yè)務(wù)場景中,class對象并不能完成spring對bean的抽象,所以弄了一個BeanDefinition作為bean的抽象建模對象
    2022-11-11
  • Spring框架IOC容器底層原理詳解

    Spring框架IOC容器底層原理詳解

    在java當(dāng)中一個類想要使用另一個類的方法,就必須在這個類當(dāng)中創(chuàng)建這個類的對象,Spring將創(chuàng)建對象的權(quán)利給了IOC,在IOC當(dāng)中創(chuàng)建了ABC三個對象,那么我們我們其他的類只需要調(diào)用集合,大大的解決了程序耦合性的問題
    2022-07-07

最新評論

石嘴山市| 平凉市| 库尔勒市| 塔河县| 成都市| 临朐县| 紫金县| 团风县| 唐河县| 古田县| 防城港市| 名山县| 黄骅市| 德州市| 灵山县| 尉犁县| 沾化县| 大田县| 玉溪市| 桂平市| 大悟县| 舞阳县| 宜兰市| 霍林郭勒市| 苏尼特左旗| 杨浦区| 招远市| 昆明市| 靖宇县| 迁西县| 江门市| 刚察县| 凤山县| 朝阳区| 凤冈县| 军事| 上思县| 广河县| 霍邱县| 苍溪县| 奎屯市|