目录
前言:
一对一关联查询:
一对多关联查询:
下面是上面代码中所涉及到的实体类结构设计:
一对一关联查询:
用户实体类(User):
用户详情实体类(UserDetail):
一对多关联查询:
订单实体类(Order):
订单详情实体类(OrderDetail):
下面是上面代码中所涉及到的表结构设计:
一对一关联查询:
用户表(user):
用户详情表(user_detail):
一对多关联查询:
订单表(order):
订单详情表(order_detail):
数据格式:
在一对多关联查询中,查询结果的格式通常是一个主表记录对应多个从表记录,即一个主表记录对应一个包含多个从表记录的集合。以订单表(order)和订单详情表(order_detail)为例,查询结果的格式如下:
在一对一关联查询中,查询结果的格式通常是一个主表记录对应一个从表记录,即一个主表记录对应一个从表记录对象。以用户表(user)和用户详情表(user_detail)为例,查询结果的格式如下:
感觉要写一些通俗易懂的,
上一篇直接使用mybatis注解来实现 , 这篇使用框架提供的标签映射来实现, 主打就是一个全面
下面是映射版本地址:
[Mybatis注解版的 一对一和一对多实现过程 ]_是汤圆丫的博客-CSDN博客
假设有两个表,一个是用户表(user),另一个是用户详情表(user_detail),它们之间是一对一的关系,即一个用户对应一个用户详情。下面是一对一关联查询的Mapper.xml配置文件:
在上面的配置文件中,我们定义了一个查询用户及其详情信息的SQL语句,并且定义了两个结果集,一个是userWithDetail,另一个是userDetail。其中,userWithDetail结果集中包含了user表和user_detail表的所有字段,同时还包含了一个detail属性,该属性的值是一个UserDetail对象,它通过resultMap属性引用了userDetail结果集。
假设有两个表,一个是订单表(order),另一个是订单详情表(order_detail),它们之间是一对多的关系,即一个订单对应多个订单详情。下面是一对多关联查询的Mapper.xml配置文件:
在上面的配置文件中,我们定义了一个查询订单及其详情信息的SQL语句,并且定义了两个结果集,一个是orderWithDetails,另一个是orderDetail。其中,orderWithDetails结果集中包含了order表的所有字段,同时还包含了一个details属性,该属性的值是一个List对象,它通过resultMap属性引用了orderDetail结果集。
public class User {
private int id;
private String username;
private String password;
private String email;
private UserDetail detail; // 一对一关联
// getter和setter方法
}
public class UserDetail {
private int id;
private int userId;
private String realName;
private int age;
private String address;
// getter和setter方法
}
public class Order {
private int id;
private String orderNo;
private Date createTime;
private List details; // 一对多关联
// getter和setter方法
}
public class OrderDetail {
private int id;
private int orderId;
private String productName;
private double price;
private int quantity;
// getter和setter方法
}
在实体类中,我们通过定义属性来表示表中的字段,同时还定义了一对一和一对多的关联关系。在一对一关联中,用户实体类中的detail属性表示用户详情,它的类型是UserDetail类;在一对多关联中,订单实体类中的details属性表示订单详情列表,它的类型是List类。
字段名 | 类型 | 描述 |
---|---|---|
id | int | 用户ID |
username | varchar | 用户名 |
password | varchar | 密码 |
varchar | 邮箱地址 |
字段名 | 类型 | 描述 |
---|---|---|
id | int | 用户详情ID |
user_id | int | 用户ID |
real_name | varchar | 真实姓名 |
age | int | 年龄 |
address | varchar | 地址 |
字段名 | 类型 | 描述 |
---|---|---|
id | int | 订单ID |
order_no | varchar | 订单号 |
create_time | date | 创建时间 |
字段名 | 类型 | 描述 |
---|---|---|
id | int | 订单详情ID |
order_id | int | 订单ID |
product_name | varchar | 商品名称 |
price | double | 商品价格 |
quantity | int | 商品数量 |
{
"id": 1,
"orderNo": "202201010001",
"createTime": "2022-01-01",
"details": [
{
"id": 1,
"orderId": 1,
"productName": "商品1",
"price": 100.0,
"quantity": 2
},
{
"id": 2,
"orderId": 1,
"productName": "商品2",
"price": 200.0,
"quantity": 1
}
]
}
在上面的JSON格式中,我们可以看到一个订单记录对应了两个订单详情记录,它们被封装在一个List集合中。在Java代码中
{
"id": 1,
"username": "test",
"password": "123456",
"email": "[email protected]",
"detail": {
"id": 1,
"userId": 1,
"realName": "张三",
"age": 20,
"address": "北京市"
}
}
在上面的JSON格式中,我们可以看到一个用户记录对应了一个用户详情记录,它们被封装在一个UserDetail对象中,然后作为User对象的detail属性的值。在Java代码中,我们可以通过User类的detail属性来获取这个UserDetail对象,然后获取用户详情记录的信息。