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 语句 IDnull 表示使用默认的 count 查询逻辑
maxLimit Number 单页最大限制条数null 表示无上限限制
searchCount Boolean 是否执行 count 查询true 表示会查询总记录数,用于计算总页数
pages Number 总页数 :根据 totalsize 计算得出,5 / 2 = 2.5,向上取整为 3
相关推荐
艾莉丝努力练剑1 小时前
【MYSQL】MYSQL学习的一大重点:数据库基础
linux·运维·服务器·数据库·c++·学习·mysql
那我掉的头发算什么2 小时前
【博客系统】基于Spring全家桶的博客系统(下)
java·后端·spring·mybatis·开发
不吃香菜学java2 小时前
苍穹外卖-新增菜品需求分析
java·spring boot·spring·tomcat·maven·ssm
xiaohe072 小时前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
java
smile_life_2 小时前
使用idea查看maven依赖
java·maven·intellij-idea
Predestination王瀞潞2 小时前
1. Java SE到底是什么:不仅仅是面向对象
java·开发语言
苏渡苇2 小时前
虚拟线程(Virtual Threads)初体验:10万并发如喝水(JDK 21)
java·高并发·虚拟线程·jdk21·virtual threads
xdl25992 小时前
【Python学习】网络爬虫-爬取豆瓣电影评论
爬虫·python·学习
_饭团2 小时前
C语言数组全解析:从入门到精通
c语言·开发语言·数据结构·经验分享·笔记·学习·算法