pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId>
<artifactId>other</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency> <!--数据库相关-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.22</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- SQL 执行过程 分析打印-->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.0</version>
</dependency> <!--数据库相关 over--> <dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.7</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </project>

application.yml

spring:
datasource:
# url: jdbc:mysql://localhost:33006/tt?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
# driver-class-name: com.mysql.cj.jdbc.Driver # url和driver-class-name 改成p6spy的,就可以查看sql执行信息
url: jdbc:p6spy:mysql://localhost:33006/tt?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: liuyalong logging:
level:
root: error #mybatis-plus配置控制台SQL语句
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

spy.properties

sql语句执行分析p6spy的匹配文件

# sql语句执行分析p6spy匹配文件
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

MybatisPlusConfig.java

必须配置这个分页插件才是物理分页

package com.yalong.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* @author liuyalong
* 分页插件
*/
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInterceptor.setLimit(100);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
}

pojo

package com.yalong.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import java.io.Serializable; /**
* @author liuyalong
* 注解@TableName("t_metas"):设置表名字t_metas
* 注解@TableId(value = "mid",type = IdType.AUTO):表示此字段为表的主键,value属性可以指定表中字段,
* 注解@TableId(value = "mid",type = IdType.ASSIGN_ID):默认使用雪花算法生成id
* 当此字段为自增(IdType.AUTO)时,如果给它设设置指定值会不起作用
* 注解@TableField(value = "sort") 表明这是一个表中的字段,value指定表中的列名
* 注解@TableField(exist = false) 表示这个字段不是表中的字段
*/
@Data
@TableName("t_metas")
public class Metas implements Serializable {
@TableId(value = "mid",type = IdType.ASSIGN_ID)
private Long mid; //@TableId(value = "mid",type = IdType.AUTO)
//private Integer mid; @TableField(value = "sort")
private Integer sort;
private Integer parent;
private String name;
private String slug;
private String type;
private String description;
@TableField(exist = false)
private String fuck; }

mapper

package com.yalong.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yalong.pojo.Metas; /**
* @author liuyalong
*/
public interface MetasMapper extends BaseMapper<Metas> {
}

启动类

@MapperScan("com.yalong.mapper")
@SpringBootApplication
public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args);
}
}

Test

  @Test
public void mybatisPlus() {
// HashMap<String, Object> hashMap = new HashMap<>();
// hashMap.put("mid",1);
// metasMapper.deleteByMap(hashMap);
//
// System.out.println("------查询id 6--------");
// Metas metas = metasMapper.selectById(6);
// System.out.println(metas);
// System.out.println("------插入数据--------");
// Metas metas1 = new Metas();
// metas1.setMid(998);
// metas1.setFuck("wulala1");
// metas1.setName("我叫刘亚龙11");
// metas1.setParent(5);
// metas1.setSort(0);
// int insert = metasMapper.insert(metas1);
// System.out.println("插入结果:"+insert); //查询mid列,值大于100的
QueryWrapper<Metas> metasQueryWrapper = new QueryWrapper<>();
metasQueryWrapper.gt("mid", 100);
// System.out.println("-----条件查询1-----"); // List<Metas> metas2 = metasMapper.selectList(metasQueryWrapper);
// List<Metas> userList = metasMapper.selectList(null);
// metas2.forEach(System.out::println);
System.out.println("-----条件查询2-----"); // 注意这里的metasPage 和 metasPage1 是同一个对象,
// 即selectPage传入的对象和返回的对象是同一个
//这里需要去配置分页插件才是真正的物理分页,否则是内存分页,即查询全表,然后分页
Page<Metas> metasPage = new Page<>(100, 10);
Page<Metas> metasPage1 = metasMapper.selectPage(metasPage, metasQueryWrapper); //不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分
// metasPage.setOptimizeCountSql(false);
//设置setSearchCount(false),分页查询不会执行count(1)
// metasPage.setSearchCount(false); /* System.out.println(metasPage==metasPage1);
System.out.println(metasPage.equals(metasPage1));*/
System.out.println("================= 相关的分页信息 ==================");
System.out.println("总条数:" + metasPage1.getTotal());
System.out.println("当前页码:" + metasPage1.getCurrent());
System.out.println("总页数:" + metasPage1.getPages());
System.out.println("每页显示条数:" + metasPage1.getSize());
System.out.println("是否有上一页:" + metasPage1.hasPrevious());
System.out.println("是否有下一页:" + metasPage1.hasNext()); //获取当页数据
List<Metas> records = metasPage1.getRecords();
records.forEach(System.out::println); }

SpringBoot使用Mybatis-plus及分页功能的细节部分的更多相关文章

  1. SpringBoot集成Mybatis并具有分页功能PageHelper

    SpringBoot集成Mybatis并具有分页功能PageHelper   环境:IDEA编译工具   第一步:生成测试的数据库表和数据   SET FOREIGN_KEY_CHECKS=0;   ...

  2. Mybatis Generator实现分页功能

    Mybatis Generator实现分页功能 分类: IBATIS2013-07-17 17:03 882人阅读 评论(1) 收藏 举报 mybatisibatisgeneratorpage分页 众 ...

  3. springboot中mybatis逆向工程与分页的应用

    最近在项目中应用到springboot与mybatis,在进行整合过程中遇到一些坑,在此将其整理出来,便于以后查阅与复习. 项目运行环境为:eclispe+jdk1.8+maven 一.搭建Sprin ...

  4. sql,mybatis,javascript分页功能的实现

    用三种不同的方法实现多数据的分页功能.原生sql和mybatis的操作需要每次点击不同页数时都发送http请求,进行一次数据库查询,如果放在前端页面写js语句则不需要每次都请求一次,下面是三种不同的方 ...

  5. mybatis框架的分页功能

    需求说明:为用户管理之查询用户列表功能增加分页实现      列表结果按照创建时间降序排列 /** * 需求说明:为用户管理之查询用户列表功能增加分页实现 列表结果按照创建时间降序排列 * @para ...

  6. SpringBoot 整合Mybatis + PageHelper 实现分页

    前言: 现在公司大多数都实现了前后端分离,前端使用Vue.React.AngularJS 等框架,不用完全依赖后端.但是如果对于比较小型的项目,没必要前后端分离,而SpringBoot也基本抛弃了Js ...

  7. mybatis如何实现分页功能?

    1)原始方法,使用limit,需要自己处理分页逻辑: 对于mysql数据库可以使用limit,如: select * from table limit 5,10; --返回6-15行 对于oracle ...

  8. SpringBoot+Mybatis+PageHelper实现分页

    SpringBoot+Mybatis+PageHelper实现分页 mybatis自己没有分页功能,我们可以通过PageHelper工具来实现分页,非常简单方便 第一步:添加依赖 <depend ...

  9. spring-boot 集合mybatis 的分页查询

    spring-boot 集合mybatis 的github分页查询 一.依赖包 <!-- mysql 数据库驱动. --> <dependency> <groupId&g ...

随机推荐

  1. 使用@Validated校验数据(除数据库做辅助)

    一.controller层 /** * 使用@Validated来进行校验 * @author HuangJingNa * @date 2019年12月23日 下午6:02:20 * * @param ...

  2. Debian 64位内核升级步骤

    安装相关依赖包 apt-get install bzip2 libncurses5-dev kernel-package zlib1g-dev gcc make kernel-package wget ...

  3. char 和 byte 区别

    byte 是字节数据类型 ,是有符号型的,占1 个字节:大小范围为-128-127 . char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 ):大小范围 是0-65535 :char ...

  4. bWAPP----PHP Code Injection

    PHP Code Injection 主要代码 1 <div id="main"> 2 3 <h1>PHP Code Injection</h1> ...

  5. ABBYY FineReader 15 PDF有哪些好用的功能?

    ABBYY FineReader 15(Windows系统)OCR文字识别软件中的PDF编辑器,是一个对用户相当友好的编辑器,不仅可以在其中查看,搜索PDF文档,还可以用以编辑文本,添加备注,添加与删 ...

  6. 如何用MathType 7输入连续几个数的和

    在数学的学习中,我们经常需要使用求和符合来求连续几个数的和,那么作为专业的公式编辑器,如何输入连续几个数的求和呢? 具体步骤如下: 步骤一 打开专业的公式编辑软件MathType 7,用鼠标点击上方的 ...

  7. CET-6备考丨词组、佳句积累

    一.片段积累 (2020/09/17) 近三年 CET6 - 翻译 Phrases or Expressions Notes drive to commute to and from work 开车上 ...

  8. 4 种高可用 RocketMQ 集群搭建方案!

    背景 笔者所在的业务线,最初化分为三个服务,由于业务初期业务复杂度相对简单,三个业务服务都能很好的独立完成业务功能. 随着产品迭代,业务功能越来越多后慢慢也要面对高并发.业务解耦.分布式事务等问题,所 ...

  9. 更改ubuntu的分辨率

    乘号使用xyz的x打出来

  10. HPSocket介绍与使用

    一.HPSocket介绍 HP-Socket是一套通用的高性能TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和Agent组件,广泛适用于各种不同应用场景的TCP/UDP/HTTP通信系 ...