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
相关推荐
辰海Coding3 分钟前
MiniSpring框架学习笔记-JDBC 访问框架:如何抽取 JDBC 模板并隔离数据库?
java·数据库·笔记·学习·spring
CodeStats6 分钟前
从 CPU 指令执行到权限管控:对比三大操作系统,梳理编程语言演进,解读 HTML/CSS/JS 浏览器解析的共通底层逻辑
java·linux·windows
十月的皮皮8 分钟前
C语言学习笔记20260609-字符串反转两种实现方法
c语言·笔记·学习
烧饼Fighting9 分钟前
Jenkins自动化编译部署Spring Boot项目
spring boot·自动化·jenkins
闪电悠米9 分钟前
黑马点评-Redis 消息队列-01_why_redis_mq
java·数据库·spring boot·redis·缓存·junit·消息队列
CodeSheep程序羊11 分钟前
宇树科技,即将上市!
java·c语言·c++·人工智能·python·科技·硬件工程
白露与泡影12 分钟前
Java 8老系统旁路接入AI Gateway:不升级JDK也能用AI
java·人工智能·gateway
Misnearch12 分钟前
Java中创建Map的做法
java·hashmap
scan72412 分钟前
从runtime获取信息
java·服务器·前端
心之伊始14 分钟前
Spring Cloud Gateway RequestRateLimiter 实战:Redis 令牌桶限流从配置到本地压测验证
java·架构·源码分析·csdn