mybatis多表查询

article/2025/9/24 7:49:55

目录

前言

一、Mybatis多表查询

2.一对一查询(多对一) 

 2.2 一对多查询

 2.3 多对多查询

 2.4 知识小结



前言

mybatis初学者记录每日学习日常


提示:以下是本篇文章正文内容,下面案例可供参考

一、Mybatis多表查询

内连接、左外连接、右外连接、交叉连接区别
有两个表A和表B,表A结构如下:

表B结构如下:

 

 为了把Bid和Aid加以区分,不让大家有误解,所以把Bid的起始值设置为100

有sql基本知识的人都知道,两表要做连接,就必须有个连接字段,从上表中的数据可以看出,在A表中的Aid和B表中Bnameid就是两个连接字段。下图说明了连接的所有记录集之间的关系

 现在我们对内连接和外连接一一讲解

1.内连接:

利用内连接可获取两表的公共部分的记录,即上图中记录集C

语句如下:

select * from A join B on A.Aid = B.Bnameid 

或select * from A.B where A.Aid = B.Bnameid

运行结果:

 2.外连接:

外连接分为两种,左连接和右连接

左连接,语句如下

select * from A left join B on A.Aid = B.Bnameid

运行结果如下:

右连接,语句如下

select * from A right join B on A.Aid = B.Bnameid

运行结果如下:

 

2.一对一查询(多对一) 

2.1 一对一查询的模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

2.1.1 一对一查询语句

select * from orders o,user u where o.uid = u.id

结果如下 

需求:查询所有订单关系,关系查询下单用户信息

注:

因为一个订单信息只能提供某个用户使用,所以从订单查询出发关联查询用户信息为一对一查询,如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以用有多个订单

2.1.2 配置OrderDap.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.dao.OrderDao"><!--查询所有--><select id="findAll" resultType="order">select * from orders</select></mapper>

测试结果

不难发现,结果集中user对象结果为null,与我们的需求差异很大

分析:通过订单查询用户,所以以订单为主,不能关联用户信息,因为订单里没有用户属性

因此我们需要使用resultMap,定义专门的resultMap用于映射一对一查询结果

修改OrderDao.xml:

 <resultMap id="OrdersMap" type="Orders"><id column="id" property="id"></id><result column="ordertime" property="ordertime"></result><result column="total" property="total"></result><association property="user"><id column="id" property="id"></id><result column="username" property="username"></result><result column="password" property="password"></result><result column="birthday" property="birthday"></result></association></resultMap><select id="findAll" resultMap="OrdersMap">select * from orders o,user u where o.id = u.id</select>

 查询结果:

 2.2 一对多查询

2.2.1 一对多查询的模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户一对多查询的要求:查询一个用户,于此同时查询出该用户具有的订单

 2.2.2 一对多的查询语句

select * f,o.id oid from user u left join orders o on u.id=o.uid;

查询结果

需求:

查询所有用户信息及用户关联的订单信息

分析:

用户信息和他的订单信息为一对多的关系,并且查询的过程中如果没有订单信息,此时也要将用户信息查询出来

配置UserDao.xml

<resultMap id="userMap" type="user"><id property="id" column="id"></id><result property="username" column="username"></result><result property="password" column="psaaword"></result><result property="birthday" column="birthday"></result><collection property="ordersList" ofType="orders"><result property="id" column="id"></result><result property="ordertime" column="ordertime"></result><result property="total" column="total"></result></collection></resultMap><select id="findAll" resultMap="userMap">select * from user u,orders o where u.id = o.uid</select>

 运行结果

 2.3 多对多查询

2.3.1 多对多查询的语句:

对应的sql语句

 SELECT * FROM `user` u ,sys_role r,sys_user_role ur WHERE u.id = ur.userid AND r.id = ur.roleid

 配置UserMapper.xml

<resultMap id="UserAndRoleMap" type="User"><id column="id" property="id"></id><result column="username" property="username"></result><result column="password" property="password"></result><result column="birthday" property="birthday"></result><collection property="roleList" ofType="Role"><id property="id" column="id"></id><result property="rolename" column="rolename"></result><result property="roleDesc" column="roleDesc"></result></collection></resultMap><select id="findUserAndRole" resultMap="UserAndRoleMap">select * from `user` u ,sys_role r,sys_user_role ur where u.id = ur.userid and r.id = ur.roleid</select>

测试结果

 2.4 知识小结

mybatis多表配置方式:

一对一配置:使用 做配置

一对多配置:使用+做配置

多对多配置:使用+做配置


http://chatgpt.dhexx.cn/article/GHhqWuQC.shtml

相关文章

多表查询(连接查询)

在使用数据库查询语句时&#xff0c;单表的查询有时候不能满足项目的业务需求&#xff0c;在项目开发过程中&#xff0c;有很多需求都是要涉及到多表的连接查询最终需要查询的数据来源于不同的表中时&#xff0c;这个时候需要考虑使用连接查询 新建一张员工表 -- emp drop t…

数据库高级——多表查询

多表查询 多表查询有如下几种&#xff1a; 合并结果集&#xff1a;union、union all连接查询&#xff1a; 2.1. 内连接&#xff1a;inner join on 2.2. 外连接&#xff1a;outer join on – 左外连接&#xff1a;left outer join – 右外连接&#xff1a;right outer join 2.…

MySQL多表查询

文章目录 一、什么是多表查询1、概述2、笛卡尔积现象 二、多表查询的分类1、等值连接 vs非等值连接2、自连接 vs 非自连接3、内连接 vs 外连接4、满外连接&#xff08;FULL OUTER JOIN&#xff09; 三、UNION[ALL]的使用四、7种SQL JOINS的实现 一、什么是多表查询 1、概述 多…

【MySQL】多表查询策略(多表联查子查询)

目录 一、MySQL多表查询 二、准备工作 1.运行环境 2.创建公司表 3.创建员工表 三、多表查询 &#xff08;一&#xff09;多表联查—同时查询多张表 1.联结 2.左连接 3.右连接 4.内连接 &#xff08;二&#xff09;子查询 1.SELECT子查询 2.WHERE子查询 3.FROM子…

MySQL----多表查询

MySQL----多表查询 多表关系表与表之间的联系&#xff1a;一对多(多对一)多对多一对一 多表查询多表查询的分类数据准备内连接外连接自连接联合查询子查询标量子查询列子查询行子查询表子查询 多表查询案例 多表关系 在进行数据库表结构的设计时&#xff0c;会根据业务的需求和…

SQL语句多表查询

多表查询 多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。 前提条件&#xff1a;这些一起查询的表之间是有关系的&#xff08;一对一、一对多&#xff09;&#xff0c;它们之间一定是有关联字段&#xff0c;这个关联字段可能建立了外键&a…

十、多表查询

十、多表查询 *多表查询的本质就是把多张表合并成一个临时表 1、多表数据合并方案 连接查询合并方案【最常见】 首先确保两张表之间存在【隶属关系】将两张表中的数据行【沿着水平方向进行拼接】最终得到一个拥有【完整隶属关系】的新数据行 联合查询合并方案 不需要两张表之…

图解数据库多表查询(多表联查)的几种方式

多表查询&#xff0c;也被称为多表连接查询。 为什么会有多表查询这个操作呢&#xff1f; 在实际项目开发过程中&#xff0c;会出现多张表&#xff0c;用于分类存储不同的信息&#xff0c;我们测试需要的数据也会来自不同的表&#xff0c;因此需要使用多表查询。 我们常用的…

史上最牛mysql-06 (多表连接)

多表连接 个人博客 &#xff1a;www.xiaobeigua.icu 多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。 前提条件&#xff1a;这些一起查询的表之间是有关系的&#xff08;一对一、一对多&#xff09;&#xff0c;它们之间一定是有关联字段&…

sql多表查询

1.多表查询概念&#xff1a;从多张表查询数据 2.分类&#xff1a;连接查询和子查询。 有两张表A、B 连接查询&#xff1a; 内连接 相当于查询A、B交集数据 例1&#xff1a;select * from emp,dept where emp.dep_iddept.id; 外连接 左外连接&#xff1a;相当于查询…

sql语句之多表查询

文章目录 一、笛卡尔积(交叉连接) ---->cross join1、概念2. 语法3.示例 二、内连接---->inner join1、概念2. 语法3.示例 三、外链接---->outer join1、概念2. 语法3.示例 四、联合连接---->union1、概念2.示例 一、笛卡尔积(交叉连接) ---->cross join 1、概…

连接查询(多表查询)——MySQL

连接查询&#xff08;多表查询&#xff09; 又称多表查询&#xff0c;当查询的字段涉及多个表的时候&#xff0c;就要用到连接查询 分类&#xff1a; 为表起别名&#xff1a; 提高语句的简洁度区分多个重名字段注意&#xff1a;如果为表起了别名&#xff0c;则查询的字段就不…

MySQL-多表查询

一、表架构 student(sid,sname,sage,ssex) 学生表course(cid,cname,tid) 课程表sc(sid,cid,score) 成绩表teacher(tid,tname) 教师表 二 、建表sql语句 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for course -- --…

Java中的XML解析

前言 这几天在手写Spring IOC的时候遇上了xml文件的解析&#xff0c;通过解析Spring.xml配制文件的方式来创建对象。因为之前从来都没遇见过相关的需求&#xff0c;所以对此做一份记录 XML (eXtensible Markup Language) 意为可扩展标记语言&#xff0c;被多数技术人员用以选择…

Java - XML文件解析

Java对XML文件的解析 一、前言二、实例分析 - DOM方式解析XML文件2.1 XMLDomParseUtil - 抽象工具类2.2 待解析xml文件示例2.3 解析xml文件2.3.1 新建一个用于存储xml文件中各节点的属性和属性值的类2.3.2 解析实际节点 2.4 测试 一、前言 1、HTTP网络传输中的数据组织方式有三…

Java解析XML文件的方式

在项目里&#xff0c;我们往往会把一些配置信息放到xml文件里&#xff0c;或者各部门间会通过xml文件来交换业务数据&#xff0c;所以有时候我们会遇到“解析xml文件”的需求。一般来讲&#xff0c;有基于DOM树和SAX的两种解析xml文件的方式&#xff0c;在这部分里&#xff0c;…

java解析xml格式的节点属性值

xml示例&#xff1a; <ResponseContent><Parameter><Document><RecordSet id"1"><Master name"purchase"><Record><Field name"orderNumber" value"1P05-151200172"/><Field name"…

Java解析XML字符串

在网上找了很多Java语言解析XML字符串的资料&#xff0c;很多内容写得很繁复&#xff0c;没有普适性&#xff0c;遂自己动手写了一个用Java解析XML的工具类。话不多说&#xff0c;直接看下面代码&#xff1a; XML解析工具类&#xff1a; import org.dom4j.Document; import o…

JAVA解析xml报文

目录 问题需求 响应报文格式 1&#xff0c;开发导入的依赖 2&#xff0c;开发样例 3&#xff0c;测试结果 问题需求 在工作中此项目请求指定项目之后&#xff0c;项目会返回一个xml报文格式的响应&#xff0c;此时我需要判断返回的报文是否是成功的响应报文&#xff0c;如…

Java解析xml

记录工作中遇到的一些问题和解决方式&#xff0c;自己摘抄整理了一下用来巩固&#xff0c;如有不足或有更好的方式 欢迎交流。 java解析xml的话有四种方式&#xff0c;分别为DOM,SAX,DOM4J,JDOM 转载&#xff1a;Java解析XML(4种方法)_蓝星花的博客-CSDN博客_java解析xml 这里的…