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 小时前
[041][公共模块]分布式唯一ID生成器设计与实现:一款灵活可扩展的雪花算法框架
spring boot
亦暖筑序1 小时前
Java 8老系统AI Workflow实战:把一次性AI对话升级成可恢复工作流
java·后端
敲代码的彭于晏2 小时前
Bean 生命周期完全图解:前端同学也能看懂的 Spring 核心机制
java·前端·后端
plainGeekDev3 小时前
ButterKnife → ViewBinding
android·java·kotlin
像我这样帅的人丶你还19 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩19 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia20 小时前
Mybatis的日志输入
java
亦暖筑序21 小时前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户298698530141 天前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao1 天前
14:Servlet中的页面跳转-Java Web
java·后端·架构