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. ImportError: No module named 'chardet'

    1.使用requsets出现这个错误,ImportError: No module named 'chardet' 原因:requests依赖其他一些模块 解决:依次使用pip安装即可 pip ins ...

  2. Java并发编程 - Runnbale、Future、Callable 你不知道的那点事(二)

    Java并发编程 - Runnbale.Future.Callable 你不知道的那点事(一)大致说明了一下 Runnable.Future.Callable 接口之间的关系,也说明了一些内部常用的方 ...

  3. wget 快速下载 ftp 文件

    GNU Wget 1.17.1,非交互式的网络文件下载工具. 用法: wget [选项]... [URL]... 长选项所必须的参数在使用短选项时也是必须的. 启动: -V, --version 显示 ...

  4. 图创图书管理SQL注入漏洞

    payload root@kali:~# sqlmap -u http://2*0.*6.***.3:8080/opac/recommend/recommendBookList/list --data ...

  5. jwt鉴权学习 (php示例代码)

    前段时间听朋友讲起 jwt鉴权,博主我是一脸懵逼,通过朋友坚持不懈的讲解,我终于听懂了,jwt就是登陆token校验嘛 然而事情并不是博主想象的那么简单,在一个艳阳高照,晴空万里的夜晚,博主手贱百度了 ...

  6. mysql官网下载yum

    1.进入mysql官网 2.下载页面最下方的社区下载 3.找到yum库 下载: 7.安装.rpm[root@test tools]# rpm -ivh mysql80-community-releas ...

  7. 简单几步就能把素材变成大片?老司机推荐Vegas

    "素材编辑"一般分为两种,一种是对时间线素材长度和位置的编辑,另一种就是遮罩法操作. 第一种,裁剪素材(将素材在我们选定的位置一分为二),对时间线上的素材进行裁剪,有两种方法: 一 ...

  8. 微课制作软件Camtasia中如何添加并编辑字幕?

    除了能录制视频以外,Camtasia还能直接把录制下来的视频进行剪辑,并添加视频字幕等等一些后期效果.今天我们就来看一看字幕的添加方法. 导入视频 微课制作软件Camtasia录制的视频,默认在软件& ...

  9. Python学习系列之列表(十一)

    一.为什么需要列表 变量可以存储一个元素,而列表是一个"大容器"可以存储N多个元素,程序可以方便地对这些数据进行整体操作 列表相当于其它语言中的数组 二.列表的创建1.列表需要使用 ...

  10. MySql学习笔记--详细整理--上

    目录 MySql MySql安装 连接数据库 操作数据库 数据库的列类型 数据库的字段属性 创建数据库 修改删除表 数据管理 外键 DML语言 添加 修改 删除 DQL查询数据(重点) 查询 去重 w ...