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