mybatis-plus 注解 通过中间表进行一对多、多对多查询

  • 三张表之间的关系
  • 需求
  • User实体类
  • Car实体类
  • UserDao接口
  • CarDao接口
  • user数据表
  • car数据表
  • user_car中间表
  • 参数详解
  • postman测试成功
  • 多对多示例: (与一对多同理)

三张表之间的关系

需求

一对多:查询某个 User 以及该User拥有的 Cars
多对多:查询全部 User 以及每个User拥有的 Cars

User实体类

package com.neu.mybatisplus.entity;import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;import java.io.Serializable;
import java.util.List;/*** (User)表实体类** @author makejava* @since 2022-07-06 12:05:20*/
@SuppressWarnings("serial")
@Data
public class User extends Model<User> {private Long id;private String about;private String password;private String username;private List<Car> myCars;/*** 获取主键值** @return 主键值*/@Overrideprotected Serializable pkVal() {return this.id;}}

Car实体类

package com.neu.mybatisplus.entity;import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;import java.io.Serializable;/*** (Car)表实体类** @author makejava* @since 2022-07-06 12:05:05*/
@SuppressWarnings("serial")
@Data
public class Car extends Model<Car> {private Long id;private String brand;private String price;/*** 获取主键值** @return 主键值*/@Overrideprotected Serializable pkVal() {return this.id;}}

UserDao接口

package com.neu.mybatisplus.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.neu.mybatisplus.entity.User;
import org.apache.ibatis.annotations.*;import java.util.List;/*** (User)表数据库访问层** @author makejava* @since 2022-07-06 12:05:20*/
@Mapper
public interface UserDao extends BaseMapper<User> {@Select("select * from user where user.id = #{id}")@Results(@Result(property = "myCars", column = "id",javaType = List.class,many = @Many(select = "com.neu.mybatisplus.dao.CarDao.returnCars")))User selectUserAndHisCars(@Param("id") String id);}

CarDao接口

package com.neu.mybatisplus.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.neu.mybatisplus.entity.Car;
import org.apache.ibatis.annotations.*;import java.util.List;/*** (Car)表数据库访问层** @author makejava* @since 2022-07-06 12:05:05*/@Mapper
public interface CarDao extends BaseMapper<Car> {@Select("select car.* from user_car,car where user_car.user_id = #{user_id} and car.id = user_car.car_id")List<Car> returnCars(@Param("user_id") String id);}

user数据表

-- auto-generated definition
create table user
(id       bigint auto_incrementprimary key,about    varchar(255) null,password varchar(255) null,username varchar(255) null
);

user数据表中的部分数据:

car数据表

-- auto-generated definition
create table car
(id    bigint auto_incrementprimary key,brand varchar(255) null,price varchar(255) null
);

car数据表中的部分数据

user_car中间表

-- auto-generated definition
create table user_car
(user_id bigint not null,car_id  bigint not null,constraint UK_poow88j0bwa68w98qkk69h4ugunique (car_id),constraint FKbiwwtu12d1d614gd5b35tef4xforeign key (car_id) references car (id),constraint FKgs1lsnqcl7dmnbsvc1m8wuy6hforeign key (user_id) references user (id)
);

user_car中间表中的数据

参数详解

@Select(“select * from user where user.id = #{id}”) 查询指定id的用户
@Results: 表示映射结果集
@Result :子查询 的结果写入到 主查询 的属性
property : 主查询返回值中的哪个字段,需要注入子查询的结果
column : 主查询中传递给子查询的参数
javaType: 子查询中的返回值类型
@Many: 一对多、多对多使用该注解指定子查询接口方法
many = @Many(select = “com.neu.mybatisplus.dao.CarDao.returnCars”) 指定子查询接口方法
一句话版本:用column作为子查询的参数,将子查询返回值写入property

主查询:

@Select("select * from user where user.id = #{id}")@Results(@Result(property = "myCars", column = "id",javaType = List.class,many = @Many(select = "com.neu.mybatisplus.dao.CarDao.returnCars")))User selectUserAndHisCars(@Param("id") String id);

子查询:

  @Select("select car.* from user_car,car where user_car.user_id = #{user_id} and car.id = user_car.car_id")List<Car> returnCars(@Param("user_id") String id);

postman测试成功

多对多示例: (与一对多同理)

    @Select("select * from user")@Results(@Result(property = "myCars", column = "id",javaType = List.class,many = @Many(select = "com.neu.mybatisplus.dao.CarDao.returnCars")))List<User> selectAllUserAndTheirCars();

mybatis-plus 注解 通过中间表进行一对多、多对多查询(三表)相关推荐

  1. Mybatis-Plus用纯注解完成一对多多对多查询

    Mybatis-Plus用纯注解搞定一对多&多对多查询 业务中很常见的用户-角色就属于典型的多对多关系. 假设我们需要将用户信息(包括了用户对应的角色信息)查询出来 多对多 数据表结构 use ...

  2. 2019-7-27 [MySQL] DQL 简单查询[别名/去重/运算] 条件查询 排序查询 聚合查询 分组查询 导出与导入 多表操作[一对多/多对多][创外键 创联合主键 约束 添加 删除 测试]

    文章目录 5 SQL语句(DQL) 5.1DQL准备工作和语法 5.1.1准备工作 5.1.2 DQL语法: 5.2 简单查询 5.2.1 查询所有的商品 5.2.2 查询商品名和商品价格. 5.2. ...

  3. sql语句之多表关系 一对多 多对多

    多表的关系介绍 在实际的开发过程中,项目一定是有多张表的,且这些表之间是都有关系的 表与表之间的关系分类:一对一 一对多 多对多 一对一:A表的一行对应B表的一行,反之也成立,此时,两张表可以合并成一 ...

  4. Mybatis基于注解实现增删查改和多参数列表查询

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 在[Mybatis]Mybatis入门概述及第一个Mybatis实例实现增删改查 和[Myba ...

  5. mybatis plug 只查id_Mybatis一对多/多对多查询时只查出了一条数据

    问题描述: 如果三表(包括了关系表)级联查询,主表和明细表的主键都是id的话,明细表的多条数据只能查询出来第一条/最后一条数据. 三个表,权限表(Permission),权限组表(Permission ...

  6. gorm一对一 一对多 多对多查询案例

    Student -- IDCard -- Class -- Teacher

  7. 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)

    视频地址:http://edu.51cto.com/sd/be679 在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实 ...

  8. 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多

    7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...

  9. mybatis 一对多查询_Java自学之mybatis:使用注解方式多对一查询

    学习目的:学习使用注解方式实现多对一查询,查询出所有的Product,通过product_中的cid查询到所属的Category. Part 1 mapper CategoryMapper packa ...

最新文章

  1. Python之匿名函数
  2. Hadoop系列六:Hadoop之HBase篇
  3. spring计算方圆300km内其它城市(附完整代码)
  4. Spring在3.1版本后的bean获取方法的改变
  5. 7.组件连线(贝塞尔曲线)--从零起步实现基于Html5的WEB设计器Jquery插件(含源码)...
  6. 腾讯广告算法大赛 | 第二周周冠军心得分享
  7. MySQL延时更改数据_mysql数据库备份设置延时备份方法(mysql主从配置)
  8. 软件测试第四组第一周作业第一天
  9. Zim学习笔记 (Fedora)
  10. android studio调整字体大小,如何在Android Studio中增加字体大小?
  11. 机器学习与数据挖掘 编程实现k均值算法
  12. windows 7 开机错误 未能连接到一个Windows服务
  13. 关于《完全用Linux工作》的思考
  14. java坦克大战(2.0)
  15. subprocess
  16. 2022美亚杯电子数据取证大赛-个人赛
  17. QT 在注释中遇到意外的文件结束
  18. 在北邮做《开源中国说》演讲
  19. 双优先编码器_SPS主轴双闭环应用(增量编码器)
  20. Linux系统一键安装最新内核并开启 BBR 脚本

热门文章

  1. composer详解
  2. Golang Log日志库
  3. 外文翻译原文附在后面_外文翻译与外文原文(参考格式).doc
  4. 投影变换--透视投影和正交投影
  5. Ubuntu18 安装SciDavis
  6. 2021年中式烹调师(中级)考试题及中式烹调师(中级)找解析
  7. Excel 将文本格式快速转换为数值格式
  8. 什么是java web
  9. itools官方中文版2014 v2.0.3.8_苹果同步软件
  10. DeprecationWarning: currentThread() is deprecated, use current_thread() instead