一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Fluent Mybatis 分頁查詢與sql日志輸出詳解流程篇

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

2022-03-05 15:02劍客阿良_ALiang Java教程

Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內又以Mybatis用的多,基于mybatis上的增強框架,又有mybatis plus和TK mybatis等。今天我們介紹一個新的mybatis增強框架 fluent mybatis關于分頁查詢、sql日志輸出流程

前言

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

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

GitHub代碼倉庫地址:GitHub倉庫

 

準備數據

簡單的準備了一些數據。

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

 

Sql日志配置

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

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

<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包內的日志打出來。

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

 

官方分頁查詢

我這里先按照官方的分頁查詢使用編寫接口。官方提供的寫法是Query語句中有limit方法,和mysql的limit關鍵字一致。

先定義分頁實體

import lombok.Data;

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

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

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

pageReq.getPage() * pageReq.getSize()

參數2:指定要返回的最大行數。

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 = "分頁查詢所有數據", notes = "分頁查詢所有數據")
@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);
  }
}

看下執行效果

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

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>

接口方法調整一下。

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

控制層代碼。

@ApiOperation(value = "分頁查詢所有數據2", notes = "分頁查詢所有數據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);
  }
}

看下執行效果。

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

這里要注意一下,pageHelper的第一頁是1,不是0,是有區別的。看下sql日志。

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

 

總結

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

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

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

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

原文鏈接:https://huyi-aliang.blog.csdn.net/article/details/120947681

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美高清乌克兰精品另类 | 91夜夜操| 91青青在线视频 | 好吊色视频988gao在线观看 | 无颜之月全集免费观看 | 精品国产福利在线 | 亚洲a在线视频 | 国产福利一区二区精品视频 | 精品破处| 欧美第一视频 | 四虎传媒 | 成在线人免费视频一区二区三区 | 亚洲精品AV无码永久无码 | 香蕉久久一区二区三区 | brazzers办公室 | 亚洲无人区乱码中文字幕 | 极品ts赵恩静和直男激战啪啪 | 好男人资源大全免费观看 | 肥胖老寡妇做性 | 91视频破解版 | 免费片在线观看 | 五月最新女厕所高跟嘘嘘 | 末发育xxxxx仙踪林 | 国产女乱淫真高清免费视频 | 国产日韩精品一区二区在线观看 | 成人私人影院www片免费高清 | 男人狂躁女人下面的视频免费 | 亚洲精品国产成人99久久 | 国产一区二区精品久 | 丁香成人社 | 色妞女女女女女bbbb | 亚洲免费在线观看视频 | 国产亚洲精品九九久在线观看 | 肉浦团在线观看 | 男男双性生子产乳高辣h | 亚洲干综合 | brazzers欧美教师| 亚洲国产日韩欧美mv | 日韩美女强理论片 | 99久久精彩视频 | 美女的让男人桶爽30分钟的 |