Mybatis-多表查询(xml)

这篇博客详细介绍了Mybatis中多表查询的三种方式:一对一、一对多和多对多的关联查询。内容包括数据库表关系、SQL数据表结构、具体的XML配置示例以及详细的测试结果展示。
摘要由CSDN通过智能技术生成

1.1 数据库表关系介绍

关系型数据库表关系分为

* 一对一关联关系
	人和身份证的关系。一个人只能有一张身份证,一张身份证只能属于一个人。双向【一对一】关联关系。
	
* 一对多关联关系
	一个用户可以有多个订单,从用户到订单是【一对多】关联关系。
	一个订单只能属于一个人,从订单到人是【一对一】的关联关系。
	【注意:】一个订单只从属于一个用户,所以mybatis将多对一看成了一对一
    
* 多对多关联关系
	举一个例子:业务系统中,用户和角色的关系。
	一个用户可以有多种角色:小明有可能是:经理,员工,总经理
	一种角色可以有多个用户:经理这个角色,有多个人:kobe , Curry。际项目中,多对多关系通过中间表,看成两个一对多关联关系。

1.2 SQL数据表结构

-- drop table if exists use;

-- 创建用户基本表
create table user(
	id int primary key auto_increment, -- 主键自增长
	username varchar(20) not null,
	birthday date,
	sex char(1) default '男',
	address varchar(50)
)engine=innodb auto_increment=4 default charset=utf8;

insert into user3 values (null, '侯大利','1990-10-24','男','江州');
insert into user3 values (null, '王大青','1992-11-12','女','秦阳');
insert into user3 values (null, '朱琳','1983-05-20','男','江州');
insert into user3 values (null, '田大甜','1993-03-22','女','阳州');

-- 查询数据
select * from user;

-- 创建订单表
create table orders (
	id INT PRIMARY KEY auto_increment, -- 主键自增长
	ordertime varchar(100) , -- 订单时间
	total double, -- 订单总额
	oid int -- 外键
) engine=innodb auto_increment=4 default charset=utf8;

-- 添加外键约束
alter TABLE orders ADD constraint fk_ep_id FOREIGN KEY(oid) REFERENCES user(id);

-- 插入数据
insert into `orders` values ('1', '2020-2-12', '3000', '1');
insert into `orders` values ('2', '2020-12-1', '5000', '2');
insert into `orders` values ('3', '2020-5-12', '5600', '3');
insert into `orders` values ('4', '2020-4-1', '5600', '4');
insert into `orders` values ('5', '2020-8-11', '5600', '5');
insert into `orders` values ('6', '2020-1-29', '5600', '6');

1.3 一对一关联(多对一)

一对一查询模型
用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户。
一对一查询的需求:查询所有订单,与此同时查询出每个订单所属的用户(从订单的角度出发,一个订单只能有一个用户)。

一对一查询语句

-- 查询数据
select * from orders o left join user u on o.oid =u.id
1.3.1项目目录
9.3.2 代码示例

User用户类

package cn.guardwhy.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
/*
* 用户类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
   
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
}

Orders订单类

package cn.guardwhy.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/*
*订单表
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Orders {
   
    private Integer id; // 订单id
    private String ordertime; // 订单时间
    private double money; // 总额

    // 表示当前订单属于哪个用户
    private User user;
}

sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!--在内部配置属性 -->
    <properties resource="db.properties">
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="root"/>
    </properties>

    <!--标准的日志工厂实现-->
    <settings>
        <setting name=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值