Java Fluent Mybatis 分页查询与sql日志输出详解流程

网友投稿 868 2022-11-27

java Fluent Mybatis 分页查询与sql日志输出详解流程篇

目录前言准备数据Sql日志配置官方分页查询PageHelper分页查询总结

前言

接着我上一章:java Fluent Mybatis 项目工程化与常规操作详解流程篇 下

上一章我把项目做了一部分工程化包装,主要还是想要之后的调试能够方便一些。那么这一章接着上一章的内容,做一下查询分页,并且将每次请求所调用的sql语句写在日志里面,便于我们观察定位问题。代码之后还是会上传到github。

GitHub代码仓库地址:GitHub仓库

准备数据

简单的准备了一些数据。

Sql日志配置

之前sql日志一直没有配置,后面随着使用的语句愈发复杂,决定先把日志配置上。方便调试。

这部分和fm没什么关系,如果你会配置的话,可以跳到下个标题。这里把logback.xml发出来

${CONSOLE_LOG_PATTERN}

/home/work/logs/fmp/log.log

/home/work/logs/fmp/log.%d{yyyy-MM-dd}.%i.log.gz

500MB

7

${FILE_LOG_PATTERN}

ERROR

/home/work/logs/fmp/error.log

/home/work/logs/fmp/error.%d{yyyy-MM-dd}.log.%i.log.gz

500MB

7

${FILE_LOG_PATTERN}

/home/work/logs/fmp/sql.log

500MB

/home/work/logs/fmp/sql.%d{yyyy-MM-dd}.%i.log.gz

7

${FILE_LOG_PATTERN}

简单说明一下,主要是下面这部分的配置,将mapper包内的日志打出来。

官方分页查询

我这里先按照官方的分页查询使用编写接口。官方提供的写法是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 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> 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);

}

}

看下执行效果

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分页查询

回顾一下以前分页操作,最常用的一般都是一些分页工具。这里我也把分页工具方式写一下。

添加依赖

com.github.pagehelper

pagehelper-spring-boot-starter

1.4.0

接口方法调整一下。

@Override

public PageInfo 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> selectAllPage2(@RequestBody PageReq pageReq) {

try {

return Result.ok(selectService.selectAllByPage2(pageReq));

} catch (Exception exception) {

CSlDSvaWN return Result.error(ErrorCode.BASE_ERROR_CODE.getCode(), exception.getMessage(), null);

}

}

看下执行效果。

这里要注意一下,pageHelper的第一页是1,不是0,是有区别的。看下sql日志。

2021-10-25 11:27:37.135 DEBUG 24688 --- [nio-8080-exec-4] c.h.f.f.m.T.listEnCSlDSvaWNtity_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,看习惯了,都可以。

如果本文对你有帮助,请点个赞支持一下吧。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:lnmp、lamp、lnmpa一键安装包(Updated: 2019-02-17)
下一篇:安装mongodb3.6之Installing MongoDB Compass...
相关文章

 发表评论

暂时没有评论,来抢沙发吧~