[Mybatis的一对一和一对多]

这篇具有很好参考价值的文章主要介绍了[Mybatis的一对一和一对多]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 🎂前言:

 🎂一对一关联查询:

 🎂一对多关联查询:

 🎂 下面是上面代码中所涉及到的实体类结构设计:

 🎂一对一关联查询:

 🎂用户实体类(User):

 🎂用户详情实体类(UserDetail):

 🎂一对多关联查询:

 🎂订单实体类(Order):

 🎂订单详情实体类(OrderDetail):

 🎂下面是上面代码中所涉及到的表结构设计:

 🎂一对一关联查询:

 🎂用户表(user):

 🎂用户详情表(user_detail):

 🎂一对多关联查询:

 🎂订单表(order):

 🎂订单详情表(order_detail):

 🎂数据格式:

 🎂在一对多关联查询中,查询结果的格式通常是一个主表记录对应多个从表记录,即一个主表记录对应一个包含多个从表记录的集合。以订单表(order)和订单详情表(order_detail)为例,查询结果的格式如下:

 🎂在一对一关联查询中,查询结果的格式通常是一个主表记录对应一个从表记录,即一个主表记录对应一个从表记录对象。以用户表(user)和用户详情表(user_detail)为例,查询结果的格式如下:


🎂前言:

🎂 感觉要写一些通俗易懂的,

🎂上一篇直接使用mybatis注解来实现 , 这篇使用框架提供的标签映射来实现, 主打就是一个全面

🎂下面是映射版本地址:

[Mybatis注解版的 一对一和一对多实现过程 ]_是汤圆丫的博客-CSDN博客

 🎂一对一关联查询:

假设有两个表,一个是用户表(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 密码
email 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对象,然后获取用户详情记录的信息。文章来源地址https://www.toymoban.com/news/detail-526696.html

到了这里,关于[Mybatis的一对一和一对多]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询

    MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询 MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询 com.github.dreamyoung mprelation 0.0.3.2-RELEASE 注解工具使用优缺点: 优点: 使用简单,通过在实体类上添加@OneToOne / @OneToMany / @ManyToOne / @ManyToM

    2024年01月20日
    浏览(57)
  • python#django数据库一对一/一对多/多对多

    搭建 # 一对一 class   TestUser(models.Model):     username=models.CharField(max_length=32)     password = models.CharField(max_length=32) class TestInfo(models.Model):     mick_name=models.CharField(max_length=32)     user=models.OneToOneField(to=TestUser,on_delete=models.CASCADE()#on_delete 删除的模式 CASCADE 级联删除 让后执行数

    2024年02月14日
    浏览(78)
  • java使用WebSocket实现一对一实时对话

    最近的项目中有实时对话的需求。这里也是查阅了很多的资料。使用webSocket实现一对一对话是最多的。 链接: https://pan.baidu.com/s/1Vn1e1qw7nRnU1_4R-4fcGg 提取码: qwer  逻辑讲解: 现在我们要给张三丰发一个你好,我们要解决下面两个问题 ·  这个你好怎么展示在我的窗口 ·   这个

    2023年04月09日
    浏览(53)
  • 通过一个实际例子说明Django中的数据库操作方法OneToOneField()的用法【数据表“一对一”关系】

    当我们在Django中定义一个模型时,可以使用 OneToOneField 来建立一个一对一的关系。这种关系表示两个模型之间的一种特殊关联,其中一个模型的实例只能与另一个模型的实例关联。 让我们以一个简单的示例来说明 OneToOneField 的用法。假设我们正在构建一个简单的博客应用,其

    2024年02月13日
    浏览(57)
  • [Django-04]一对一,一对多

    OneToOneField(),ForeignKey() 的参数如下 to 要连接的模型 to_field 要被关联的目标Model的字段 on_delete 删除主表(被关联的表,也就是非OneToOneField,ForeignKey的表)时,当前表怎么处理。 CASCADE-联动删除 PROTECT -抛出异常 SET_NULL-设为null SET_DEFAULT-设为预定义的默认值 SET-设置为指定的值

    2024年02月04日
    浏览(53)
  • hibernate 一对一 一对多 多对多

    User 实体类 Address 实体类 测试 User实体类 Vlog实体类 测试 测试 mappedby : 属性指向实体关联表的拥有者,声明在被拥有者。 简单说就是另一边定义了关联规则,这边不用再定义一遍了,直接引用就行。 @JoinColumn : 外键列 在一对一中 @JoinColumn 声明在那个实体类中,生成数据库表

    2024年02月13日
    浏览(50)
  • queryWrapper处理一对一,一对多,多对多

    是的,定义一个 BankUser 对象时,通常需要在其内部定义一个 BankCard 字段来表示其与 bank_card 表的关联关系。 例如,在 BankUser 类中定义一个 BankCard 对象作为其属性:```java ``` 然后,在查询 BankUser 对象时,需要使用 LEFT JOIN 将 bank_user 和 bank_card 表进行关联,并使用 select 方法指

    2024年02月04日
    浏览(49)
  • [MySql]实现多表查询-一对一,一对多

    目录 多表关联关系的分类 mybatis中的多表查询: 数据库准备  项目目录  一对一查询(多对一) 方式一:(xml文件映射) 查询结果:  方式二:(注解映射)  一对多查询(一对多) 方式一:(xml文件映射)  方式二:(注解映射) 既然数据库是存储项目中的数据的,项目中的

    2023年04月10日
    浏览(55)
  • TCP一对一聊天

    客户端 服务端  结果展示  第二种 客户端 服务端 结果

    2024年02月04日
    浏览(45)
  • OVS Vxlan一对一模式VS一对多模式

    OVS Vxlan模式 OVS 支持 GRE、VXLAN、STT、Geneve和IPsec隧道协议,这些隧道协议就是overlay网络的基础协议,通过对物理网络做的一层封装和扩展,解决了二层网络数量不足的问题,最大限度的减少对底层物理网络拓扑的依赖性,同时也最大限度的增加了对网络的控制。针对VXLAN隧道创

    2024年02月03日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包