Springboot学习六:MybatisPlus的多表查询以及分页查询

对于多表查询,可利用如下注解查询

现存在User表和Order表,分别在数据库中以及java的实体类中。

注:此篇的User表统一指数据库中名为User的数据表。

Order:

User:

其中Order中的uid是User的外键。(并不需要在数据库添加约束,自己有概念即可)

在实体类User中添加orders字段,加上对应getter,setter,toString方法,后续用于通过User来查询Order表(此处由于orders字段并不在User表中存在,所以利用TableField注解标识此字段不存在,来告诉mybatisplus的查询语句避开此字段,否则汇报错。但若使用mybatis的自写sql语句查询,则此处不需要添加注解)

然后在usermapper接口中配置查询方法的Sql语句,(mybatis和plus版本是互补而非互斥,所以继承plus包后也可以正常使用sql自定义查询,只要方法名不一样)先利用select查询user的所有数据,然后编写Results注解。

id="userMap"用来让其他映射可以使用该Results规则,只在本方法中使用则不用加。property对应实体类中的属性,column对应数据库中的字段名,javaType写上List类型,对应返回的orders对象中一个用户可以有多个订单。many=@many:第一个many是固定语法,与@many组成一对多的的多表查询。select后面写上跨表查询的方法地址,注意得从com根目录开始写

然后续写Order表的查询,在OrderMapper中查询所有目标uid的Order表内容。(注意此时我们的数据库表名order在数据库中是一个关键词,所以直接写表名order会查询失败,需要在order表框上双反引号` `,不要写成单引号;或者在Order实体类写上注解TableName指定查询表名)mybatis自动将 column = "id" 的user.Id列依次传值给uid,通过查询方法返回多个Order类对象,集成List集合,然后返回值给orders属性。

访问浏览器:返回了User表中id为1的所有数据,以及Order表中uid为1的所有数据,继续返回剩余id的双表数据。

对于条件查询,mybatisplus提供了对应的注解条件构造器 | MyBatis-Plus,其中Abstractwrapper提供了很多子类方法,例如Querywrapper类中有eq用来匹配单个字段,lt(lessthan)匹配小于某某的字段等等。

查询语句中,先利用QueryWrapper创建对象,引用eq方法,查询username表中数值为Davidlee的User类。返回mybatisplus自带的selectList方法,queryWrapper作为存储参数。

分页查询:

先在配置类添加配置文件

复制代码
@Configuration
public class userconfig {
    @Bean
    public MybatisPlusInterceptor paginationInterceptor() {
        // 初始化 MyBatis-Plus 核心拦截器
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 配置 MySQL 分页插件,参数检查自己的数据库类型是否是mysql
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        // 添加分页内部拦截器
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }
}

Ipage是mybatisplus的查询分页结果集的接口。page是User类的Page页对象,参数current是从第几页查询,size是查询多少条数据。然后通过plus的内置查询语句将page对象数据读取,还可以添加queryWrapper条件查询,将返回的结果集给IPage类对象ipage,mybatis会自动整理结果包括总页数,总条数,当前条数据。

查询结果:

字段名 类型 含义
total Number 总记录数 :数据库中符合条件的总条数,这里是 5 条
size Number 每页显示条数 :当前分页设置的每页大小,这里是 2 条 / 页
current Number 当前页码 :当前查询的是第几页,这里是第 1 页
orders Array 排序规则:用于指定排序字段和排序方式,空数组表示无排序
optimizeCountSql Boolean 是否优化 count 查询 :true 表示 MyBatis-Plus 会自动优化统计总数的 SQL 语句
hitCount Boolean 是否命中 count 查询缓存 :false 表示未使用缓存,直接查询数据库
countId String 自定义 count 语句 ID :null 表示使用默认的 count 查询逻辑
maxLimit Number 单页最大限制条数 :null 表示无上限限制
searchCount Boolean 是否执行 count 查询 :true 表示会查询总记录数,用于计算总页数
pages Number 总页数 :根据 total 和 size 计算得出,5 / 2 = 2.5,向上取整为 3 页
相关推荐
从琳开始98938 分钟前
网络原理入门(二)------OSI七层模型?TCP/IP五层(四层)模型原来是这样的
java·网络·tcp/ip·java-ee·php
小李不想当小白40 分钟前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
文丑颜不良啊1 小时前
LeetCode1861~1880题目解析
java·leetcode
Flynn Liang1 小时前
AgentScope Java 深度解析:ReActAgent、HarnessAgent 与多智能体编排——JVM 上的自治 Agent 底座
java·大模型·架构设计·ai agent·spring ai·langchain4j·agentscope
Flynn Liang1 小时前
上线后怎么排查 AI 调用?Spring AI Observability:token/延迟/成本埋点与全链路追踪
java·人工智能·spring·监控·可观测性·observability·springai
文丑颜不良啊1 小时前
LeetCode1921~1940题目解析
java·leetcode
Tt有了t2 小时前
设计模式速查
java·python·设计模式
Thomas.Sir2 小时前
第15课:SpringBoot连接池详解:HikariCP配置、调优、监控,4.x连接池新特性
java·spring boot
VimorphTech2 小时前
每批开 4 个线程,为什么限制不住 TTS 的总并发?
java·spring boot·spring
Pniubi2 小时前
Java为什么要分堆和栈
java·开发语言