springboot怎么整合mybatis分頁攔截器

這篇文章主要介紹“springboot怎么整合mybatis分頁攔截器”,在日常操作中,相信很多人在springboot怎么整合mybatis分頁攔截器問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”springboot怎么整合mybatis分頁攔截器”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

作為一家“創(chuàng)意+整合+營銷”的成都網(wǎng)站建設(shè)機構(gòu),我們在業(yè)內(nèi)良好的客戶口碑。成都創(chuàng)新互聯(lián)公司提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設(shè)計、網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、創(chuàng)意表現(xiàn)、網(wǎng)頁制作、系統(tǒng)開發(fā)以及后續(xù)網(wǎng)站營銷運營等一系列服務(wù),幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營模式與有效的網(wǎng)絡(luò)營銷方法,創(chuàng)造更大的價值。

簡介

今天開發(fā)時想將自己寫好的代碼拿來優(yōu)化,因為不想在開發(fā)服弄,怕搞壞了到時候GIT到生產(chǎ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分頁攔截器

正常的:

springboot怎么整合mybatis分頁攔截器

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ù)
    #多久進行一次檢測,檢測需要關(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是否進行count查詢 - 默認不查詢
        p.setProperty("rowBoundsWithCount", "true");
        // 當設(shè)置為true的時候,如果page size設(shè)置為0(或RowBounds的limit=0),就不執(zhí)行分頁,返回全部結(jié)果
        p.setProperty("pageSizeZero", "true");
        // 分頁合理化
        p.setProperty("reasonable", "false");
        // 是否支持接口參數(shù)來傳遞分頁參數(shù),默認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);,否則會默認不分頁,也可以自己加limit.

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

GROUP BY id ORDER BY create_time desc LIMIT ?

到此,關(guān)于“springboot怎么整合mybatis分頁攔截器”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

本文名稱:springboot怎么整合mybatis分頁攔截器
文章網(wǎng)址:http://muchs.cn/article28/ghggcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計網(wǎng)站營銷、服務(wù)器托管軟件開發(fā)、網(wǎng)站策劃、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)