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

Java Fluent Mybatis 分頁查詢與sql日志輸出詳解流程篇

 更新時間:2021年10月28日 14:01:43   作者:劍客阿良_ALiang  
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內(nèi)又以Mybatis用的多,基于mybatis上的增強框架,又有mybatis plus和TK mybatis等。今天我們介紹一個新的mybatis增強框架 fluent mybatis關(guān)于分頁查詢、sql日志輸出流程

前言

接著我上一章:Java Fluent Mybatis 項目工程化與常規(guī)操作詳解流程篇 下

上一章我把項目做了一部分工程化包裝,主要還是想要之后的調(diào)試能夠方便一些。那么這一章接著上一章的內(nèi)容,做一下查詢分頁,并且將每次請求所調(diào)用的sql語句寫在日志里面,便于我們觀察定位問題。代碼之后還是會上傳到github。

GitHub代碼倉庫地址:GitHub倉庫

準(zhǔn)備數(shù)據(jù)

簡單的準(zhǔn)備了一些數(shù)據(jù)。

Sql日志配置

之前sql日志一直沒有配置,后面隨著使用的語句愈發(fā)復(fù)雜,決定先把日志配置上。方便調(diào)試。

這部分和fm沒什么關(guān)系,如果你會配置的話,可以跳到下個標(biāo)題。這里把logback.xml發(fā)出來

<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
 
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/home/work/logs/fmp/log.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>/home/work/logs/fmp/log.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxFileSize>500MB</maxFileSize>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </layout>
        </encoder>
    </appender>
 
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <File>/home/work/logs/fmp/error.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>/home/work/logs/fmp/error.%d{yyyy-MM-dd}.log.%i.log.gz</fileNamePattern>
            <maxFileSize>500MB</maxFileSize>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </layout>
        </encoder>
    </appender>
 
    <appender name="SQL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/home/work/logs/fmp/sql.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <maxFileSize>500MB</maxFileSize>
            <fileNamePattern>/home/work/logs/fmp/sql.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </layout>
        </encoder>
    </appender>
    <logger name="org.springframework.web" level="info"/>
    <logger name="com.hy.fmp.fluent.mapper" level="debug">
        <appender-ref ref="SQL"/>
    </logger>
    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>
</configuration>

簡單說明一下,主要是下面這部分的配置,將mapper包內(nèi)的日志打出來。

    <logger name="com.hy.fmp.fluent.mapper" level="debug">
        <appender-ref ref="SQL"/>
    </logger>

官方分頁查詢

我這里先按照官方的分頁查詢使用編寫接口。官方提供的寫法是Query語句中有l(wèi)imit方法,和mysql的limit關(guān)鍵字一致。

先定義分頁實體

import lombok.Data;
 
/**
 * @Program: fluent-mybatis-project @ClassName: PageReq @Author: huyi @Date: 2021-10-24
 * 23:21 @Description: 分頁參數(shù) @Version: V1.0
 */
@Data
public class PageReq {
  /** 每頁數(shù)量 */
  private Integer size;
  /** 頁碼 */
  private Integer page;
}

這里注意,我們要按照limit的語法來,下面是接口方法實現(xiàn)。

參數(shù)1:指定要返回的第一行的偏移量。第一行的偏移量為0,而不是1,所以對應(yīng)我們的參數(shù)就是

pageReq.getPage() * pageReq.getSize()

參數(shù)2:指定要返回的最大行數(shù)。

pageReq.getSize()
  @Autowired private TestFluentMybatisMapper testFluentMybatisMapper;
 
  @Override
  public StdPagedList<TestFluentMybatisEntity> selectAllByPage(PageReq pageReq) {
    return testFluentMybatisMapper.stdPagedEntity(
        new TestFluentMybatisQuery()
            .selectAll()
            .limit(pageReq.getPage() * pageReq.getSize(), pageReq.getSize()));
  }

控制層:

  @Autowired private ISelectService selectService;
 
  @ApiOperation(value = "分頁查詢所有數(shù)據(jù)", notes = "分頁查詢所有數(shù)據(jù)")
  @RequestMapping(value = "/selectAllPage", method = RequestMethod.POST)
  @ResponseBody
  public Result<StdPagedList<TestFluentMybatisEntity>> selectAllPage(@RequestBody PageReq pageReq) {
    try {
      return Result.ok(selectService.selectAllByPage(pageReq));
    } catch (Exception exception) {
      return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);
    }
  }

看下執(zhí)行效果

OK,沒什么問題??匆幌氯罩敬蛴?。

2021-10-25 11:23:55.313 DEBUG 24688 --- [nio-8080-exec-5] c.h.f.f.m.T.countNoLimit : ==> Preparing: SELECT COUNT(*) FROM `test_fluent_mybatis`
2021-10-25 11:23:55.313 DEBUG 24688 --- [nio-8080-exec-5] c.h.f.f.m.T.countNoLimit : ==> Parameters:
2021-10-25 11:23:55.316 DEBUG 24688 --- [nio-8080-exec-5] c.h.f.f.m.T.countNoLimit : <== Total: 1
2021-10-25 11:23:55.317 DEBUG 24688 --- [nio-8080-exec-5] c.h.f.f.m.T.listEntity : ==> Preparing: SELECT `id`, `age`, `create_time`, `del_flag`, `name` FROM `test_fluent_mybatis` LIMIT ?, ?
2021-10-25 11:23:55.317 DEBUG 24688 --- [nio-8080-exec-5] c.h.f.f.m.T.listEntity : ==> Parameters: 2(Integer), 2(Integer)
2021-10-25 11:23:55.319 DEBUG 24688 --- [nio-8080-exec-5] c.h.f.f.m.T.listEntity : <== Total: 2

PageHelper分頁查詢

回顧一下以前分頁操作,最常用的一般都是一些分頁工具。這里我也把分頁工具方式寫一下。

添加依賴

        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.0</version>
        </dependency>

接口方法調(diào)整一下。

  @Override
  public PageInfo<TestFluentMybatisEntity> selectAllByPage2(PageReq pageReq) {
    PageHelper.startPage(pageReq.getPage(), pageReq.getSize());
    return new PageInfo<>(
        testFluentMybatisMapper.listEntity(new TestFluentMybatisQuery().selectAll()));
  }

控制層代碼。

  @ApiOperation(value = "分頁查詢所有數(shù)據(jù)2", notes = "分頁查詢所有數(shù)據(jù)2")
  @RequestMapping(value = "/selectAllPage2", method = RequestMethod.POST)
  @ResponseBody
  public Result<PageInfo<TestFluentMybatisEntity>> selectAllPage2(@RequestBody PageReq pageReq) {
    try {
      return Result.ok(selectService.selectAllByPage2(pageReq));
    } catch (Exception exception) {
      return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);
    }
  }

看下執(zhí)行效果。

這里要注意一下,pageHelper的第一頁是1,不是0,是有區(qū)別的??聪聅ql日志。

2021-10-25 11:27:37.135 DEBUG 24688 --- [nio-8080-exec-4] c.h.f.f.m.T.listEntity_COUNT : ==> Preparing: SELECT count(0) FROM `test_fluent_mybatis`
2021-10-25 11:27:37.136 DEBUG 24688 --- [nio-8080-exec-4] c.h.f.f.m.T.listEntity_COUNT : ==> Parameters:
2021-10-25 11:27:37.139 DEBUG 24688 --- [nio-8080-exec-4] c.h.f.f.m.T.listEntity_COUNT : <== Total: 1
2021-10-25 11:27:37.140 DEBUG 24688 --- [nio-8080-exec-4] c.h.f.f.m.T.listEntity : ==> Preparing: SELECT `id`, `age`, `create_time`, `del_flag`, `name` FROM `test_fluent_mybatis` LIMIT ?
2021-10-25 11:27:37.140 DEBUG 24688 --- [nio-8080-exec-4] c.h.f.f.m.T.listEntity : ==> Parameters: 2(Integer)
2021-10-25 11:27:37.142 DEBUG 24688 --- [nio-8080-exec-4] c.h.f.f.m.T.listEntity : <== Total: 2

總結(jié)

是使用官方方式還是pageHelper,看習(xí)慣了,都可以。

如果本文對你有幫助,請點個贊支持一下吧。

到此這篇關(guān)于Java Fluent Mybatis 分頁查詢與sql日志輸出詳解流程篇的文章就介紹到這了,更多相關(guān)Java Fluent Mybatis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java ThreadPoolExecutor的參數(shù)深入理解

    Java ThreadPoolExecutor的參數(shù)深入理解

    這篇文章主要介紹了Java ThreadPoolExecutor的參數(shù)深入理解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 解析 MyBatis 中 Mapper 生效的來龍去脈

    解析 MyBatis 中 Mapper 生效的來龍去脈

    這篇文章主要介紹了解析 MyBatis 中 Mapper 生效的前因后果,介紹了mybatis基本使用及源碼分析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 簡單易懂的java8新特性之lambda表達式知識總結(jié)

    簡單易懂的java8新特性之lambda表達式知識總結(jié)

    一直想針對lambda表達式作一個總結(jié),借助于這次公司安排的考試作一個入門式的總結(jié),對正在學(xué)習(xí)java的小伙伴們非常有幫助,需要的朋友可以參考下
    2021-05-05
  • 簡單學(xué)習(xí)Java抽象類要點及實例

    簡單學(xué)習(xí)Java抽象類要點及實例

    這篇文章主要介紹了Java抽象類要點及實例,有需要的朋友可以參考一下
    2014-01-01
  • SpringBoot與Quartz集成實現(xiàn)分布式定時任務(wù)集群的代碼實例

    SpringBoot與Quartz集成實現(xiàn)分布式定時任務(wù)集群的代碼實例

    今天小編就為大家分享一篇關(guān)于SpringBoot與Quartz集成實現(xiàn)分布式定時任務(wù)集群的代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • nacos中的配置使用@Value注解獲取不到值的原因及解決方案

    nacos中的配置使用@Value注解獲取不到值的原因及解決方案

    這篇文章主要介紹了nacos中的配置使用@Value注解獲取不到值的原因分析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 只需兩步實現(xiàn)Eclipse+Maven快速構(gòu)建第一個Spring Boot項目

    只需兩步實現(xiàn)Eclipse+Maven快速構(gòu)建第一個Spring Boot項目

    這篇文章主要介紹了只需兩步實現(xiàn)Eclipse+Maven快速構(gòu)建第一個Spring Boot項目,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • SpringBoot中的定時任務(wù)和異步調(diào)用詳解

    SpringBoot中的定時任務(wù)和異步調(diào)用詳解

    這篇文章主要介紹了SpringBoot中的定時任務(wù)和異步調(diào)用詳解,SpringBoot 定時任務(wù)是一種在SpringBoot應(yīng)用中自動執(zhí)行任務(wù)的機制,通過使用Spring框架提供的@Scheduled注解,我們可以輕松地創(chuàng)建定時任務(wù),需要的朋友可以參考下
    2023-10-10
  • Java  Option用法詳解

    Java  Option用法詳解

    Optional類是Java8為了解決null值判斷問題,借鑒google guava類庫的Optional類而引入的一個同名Optional類,使用Optional類可以避免顯式的null值判斷,避免null導(dǎo)致的NPE,下面以一些典型場景為例,列出Optional API常用接口的用法,并附上相應(yīng)代碼,感興趣的朋友一起看看吧
    2024-01-01
  • Java網(wǎng)絡(luò)編程基礎(chǔ)用法詳解

    Java網(wǎng)絡(luò)編程基礎(chǔ)用法詳解

    網(wǎng)絡(luò)編程是指編寫運行在多個設(shè)備(計算機)的程序,這些設(shè)備都通過網(wǎng)絡(luò)連接起來,本文將帶大家詳細了解Java的網(wǎng)絡(luò)編程,文中有相關(guān)的代碼示例,需要的朋友可以參考下
    2023-05-05

最新評論