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

mybatis-plus查詢無(wú)數(shù)據(jù)問(wèn)題及解決

 更新時(shí)間:2022年12月06日 09:04:20   作者:陽(yáng)光coding  
這篇文章主要介紹了mybatis-plus查詢無(wú)數(shù)據(jù)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mybatis-plus查詢無(wú)數(shù)據(jù)

由于本周工作原因,spring系列放到下周寫(xiě),今天分享一個(gè)實(shí)際開(kāi)發(fā)中出現(xiàn)的問(wèn)題和解決辦法。

先說(shuō)說(shuō)背景

事情是這樣的,我們上線了一個(gè)繳費(fèi)系統(tǒng),但是一到高峰繳費(fèi),就會(huì)出現(xiàn)通過(guò)手機(jī)號(hào)查詢不到個(gè)人的繳費(fèi)信息。只要重啟,能好那么一下,然后隔一段時(shí)間,就又不行了。而且這塊還發(fā)現(xiàn)一點(diǎn)奇怪的規(guī)律,比如查詢某個(gè)號(hào)碼的,發(fā)現(xiàn)是點(diǎn)了9次之后,才會(huì)出現(xiàn),之后便會(huì)一直這樣。

使用的技術(shù)是springboot+spring mvc+mybatis-plus,數(shù)據(jù)庫(kù)是sqlserver(查的別人的庫(kù))

ps:由于事情過(guò)去一段時(shí)間了,當(dāng)時(shí)忘了截圖,這里可能是純文字描述,請(qǐng)見(jiàn)諒。

然后最開(kāi)始根據(jù)經(jīng)驗(yàn)做了幾個(gè)判斷

1、是不是mybatis-plus的bug,連sqlserver有問(wèn)題?

2、是不是mybatis-plus的緩存問(wèn)題,從緩存中取數(shù)據(jù)取不到?

3、是不是并發(fā)太大,導(dǎo)致數(shù)據(jù)庫(kù)拒絕連接,或者連接超時(shí)了?

根據(jù)以上3點(diǎn)開(kāi)始排查 

1、debug mybatis源碼,發(fā)現(xiàn)沒(méi)問(wèn)題,pass。

2、將緩存設(shè)置去掉,不啟用緩存,發(fā)現(xiàn)還會(huì)出問(wèn)題,不是這個(gè)問(wèn)題

3、如果是超時(shí),應(yīng)該是有日志,但是日志是沒(méi)有的,也不是這個(gè)問(wèn)題,而且放到本地,調(diào)高并發(fā)量測(cè)試,也是沒(méi)有問(wèn)題的。

來(lái)來(lái)回回搞了好久,都不行。最后沒(méi)辦法,把日志級(jí)別調(diào)到trace,開(kāi)啟打印sql語(yǔ)句,看看是不是sql語(yǔ)句搞的鬼,果不其然,發(fā)現(xiàn)一些問(wèn)題。

sql語(yǔ)句最開(kāi)始是都正常的,但是當(dāng)查詢不到數(shù)據(jù)的時(shí)候,sql語(yǔ)句最后被拼接上了分頁(yè),而且查的10行到20行的數(shù)據(jù)(為什么剛好查詢的是10行到20行?最開(kāi)始我提到了”比如查詢某個(gè)號(hào)碼的,發(fā)現(xiàn)是點(diǎn)了9次之后,才會(huì)出現(xiàn),之后便會(huì)一直這樣“),所以查不到。但是為啥點(diǎn)擊第2-8次的時(shí)候,不出現(xiàn),我也沒(méi)搞明白,有清楚的還請(qǐng)告知一下。

幾經(jīng)周折發(fā)現(xiàn),mybatis配置了這么一項(xiàng):

注意畫(huà)紅框地方,這個(gè)就是打開(kāi)localpage模式。

supportMethodsArguments 這個(gè)值默認(rèn)是false,被設(shè)置了true,因此mybatis會(huì)自動(dòng)拼接自動(dòng)分頁(yè)。

把這個(gè)改成false或者直接去掉,就好了。完美解決。

當(dāng)然啦,大家一般都不會(huì)設(shè)置這個(gè)參數(shù),這里只是給大家做一個(gè)參考。

mybatis-plus查詢操作

一、查詢

1.1、普通查詢

    /**
     * 普通查詢
     */
    @Test
    public void selectById() {
        User user = userMapper.selectById(1412963147760857089L);
        System.out.println(user);
    }

查詢結(jié)果:

1.2、通過(guò)多個(gè)ID批量查詢

   //多個(gè)id批量查詢
    @Test
    public void testSelectByIds(){
        List<User> users = userMapper.selectBatchIds(Arrays.asList(1412963147760857089L,1413086639927959553L,1413087102014337026L));
        System.out.println(users);
    }

查詢結(jié)果

1.3、簡(jiǎn)單條件查詢

    //簡(jiǎn)單條件查詢
    @Test
    public void selectSimpleTerm(){
        Map<String,Object> columnMap = new HashMap<>();
        columnMap.put("name","lucyYY");
        columnMap.put("age",20);
        List<User> users = userMapper.selectByMap(columnMap);
        System.out.println(users);
    }

查詢結(jié)果

二、分頁(yè)

2.1、分頁(yè)插件

MyBatis Plus自帶分頁(yè)插件,只要簡(jiǎn)單的配置即可實(shí)現(xiàn)分頁(yè)功能。

2.2、添加分頁(yè)插件

配置類中添加@Bean配置:

    /**
     * 分頁(yè)查詢插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }

2.3、測(cè)試selectPage分頁(yè)

通過(guò)page對(duì)象獲取相關(guān)數(shù)據(jù):

    //分頁(yè)查詢
    @Test
    public void testSelectPage(){
        Page<User> page = new Page(2,3);
        Page<User> userPage = userMapper.selectPage(page, null);
        //返回對(duì)象得到的分頁(yè)數(shù)據(jù)
        long pages = userPage.getPages(); //總頁(yè)數(shù)
        long current = userPage.getCurrent();//當(dāng)前頁(yè)
        List<User> records = userPage.getRecords();//查詢到的分頁(yè)數(shù)據(jù)
        long total = userPage.getTotal();//總記錄數(shù)
        boolean hasNext = userPage.hasNext();//是否還存在上一分頁(yè)
        boolean hasPrevious = userPage.hasPrevious();//是否還存在下一分頁(yè)
        System.out.println(pages);
        System.out.println(current);
        System.out.println(records);
        System.out.println(total);
        System.out.println(hasNext);
        System.out.println(hasPrevious);
    }

查詢結(jié)果

2.4、測(cè)試selectMapPage分頁(yè)

當(dāng)指定了特定的查詢列時(shí),希望分頁(yè)結(jié)果列表只返回被查詢的列,而不是很多null值。這時(shí)就可以測(cè)試selectMapsPage分頁(yè):結(jié)果集是Map。

    //根據(jù)特定條件查詢結(jié)果
    @Test
    public void testSelectMapPage(){

        Page<Map<String,Object>> page = new Page<>(1,5);
        Page<Map<String,Object>> pageParam = userMapper.selectMapsPage(page,null);
        List<Map<String,Object>> records = pageParam.getRecords();
        records.forEach(System.out::println);
        System.out.println(pageParam.getCurrent());
        System.out.println(pageParam.getPages());
        System.out.println(pageParam.getSize());
        System.out.println(pageParam.getTotal());
        System.out.println(pageParam.hasNext());
        System.out.println(pageParam.hasPrevious());
    }

查詢結(jié)果

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java  StringBuilder類的詳解及簡(jiǎn)單實(shí)例

    java StringBuilder類的詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了java StringBuilder類的詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,實(shí)現(xiàn)了StringBuilder類的追加、插入、替換、刪除等操作,需要的朋友可以參考下
    2017-08-08
  • Spring中容器創(chuàng)建的四種方式示例

    Spring中容器創(chuàng)建的四種方式示例

    這篇文章主要介紹了Spring中容器創(chuàng)建的四種方式示例,Spring容器是Spring框架的核心部分,它負(fù)責(zé)管理和組織應(yīng)用程序中的對(duì)象,它提供了一種輕量級(jí)的、非侵入式的方式來(lái)實(shí)現(xiàn)對(duì)象的創(chuàng)建、依賴注入和生命周期管理,需要的朋友可以參考下
    2023-10-10
  • Java運(yùn)行時(shí)環(huán)境之ClassLoader類加載機(jī)制詳解

    Java運(yùn)行時(shí)環(huán)境之ClassLoader類加載機(jī)制詳解

    這篇文章主要給大家介紹了關(guān)于Java運(yùn)行時(shí)環(huán)境之ClassLoader類加載機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • java并發(fā)編程專題(一)----線程基礎(chǔ)知識(shí)

    java并發(fā)編程專題(一)----線程基礎(chǔ)知識(shí)

    這篇文章主要介紹了java并發(fā)編程線程的基礎(chǔ)知識(shí),文中講解非常詳細(xì),幫助大家更好的學(xué)習(xí)JAVA并發(fā)編程,感興趣想學(xué)習(xí)JAVA的可以了解下
    2020-06-06
  • 基于java編寫(xiě)局域網(wǎng)多人聊天室

    基于java編寫(xiě)局域網(wǎng)多人聊天室

    這篇文章主要為大家詳細(xì)介紹了基于java編寫(xiě)局域網(wǎng)多人聊天室的相關(guān)資料,使用socket基于java編寫(xiě)一個(gè)局域網(wǎng)聊天室,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式實(shí)現(xiàn)方法詳解

    Java中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Java中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Java中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式的相關(guān)算法原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • 深入了解java 8的函數(shù)式編程

    深入了解java 8的函數(shù)式編程

    函數(shù)式編程并不是Java新提出的概念,其與指令編程相比,強(qiáng)調(diào)函數(shù)的計(jì)算比指令的計(jì)算更重要;與過(guò)程化編程相比,其中函數(shù)的計(jì)算可以隨時(shí)調(diào)用。下面我們來(lái)詳細(xì)了解一下吧
    2019-06-06
  • MyBatis入門(mén)介紹(超簡(jiǎn)單)

    MyBatis入門(mén)介紹(超簡(jiǎn)單)

    mybatis是Java的持久層框架, JAVA操作數(shù)據(jù)庫(kù)是通過(guò)jdbc來(lái)操作的,而mybatis是對(duì)jdbc的封裝。下文給大家介紹mybatis入門(mén)知識(shí),感興趣的朋友參考下吧
    2017-08-08
  • SpringBoot使用@Validated處理校驗(yàn)的方法步驟

    SpringBoot使用@Validated處理校驗(yàn)的方法步驟

    @Validated?注解的主要目的是啟用和利用?Spring?的驗(yàn)證框架,它可以用于類上也可以用于方法參數(shù)上,本文給大家介紹了SpringBoot使用@Validated優(yōu)雅的處理校驗(yàn)的方法步驟,通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • 詳解Lombok快速上手(安裝、使用與注解參數(shù))

    詳解Lombok快速上手(安裝、使用與注解參數(shù))

    這篇文章主要介紹了詳解Lombok快速上手(安裝、使用與注解參數(shù)) ,這里整理了一些日常編碼中能遇到的所有關(guān)于它的使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12

最新評(píng)論