欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试

Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试

2025/2/22 2:05:14 来源:https://blog.csdn.net/w776341482/article/details/143963306  浏览:    关键词:Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧!!!非常感谢!!持续更新!!!

大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html

在这里插入图片描述

目前已经更新到了:

  • MyBatis(正在更新)

一对多

基本介绍

在数据库设计中,一对多(One-to-Many)的关系是最常见的关系模型之一。它通常用于表示一个实体(表中的一条记录)可以与另一个实体的多条记录相关联的情况。
一对多关系表示一个实体(父表中的一条记录)可以关联到多个实体(子表中的多条记录),而子表中的每条记录只能与父表中的一条记录关联。

一对多优点

数据清晰,关系明确。
数据完整性可以通过外键约束强制维护。
查询灵活,通过关联表可以获取丰富的数据。

一对多缺点

对于复杂查询,可能涉及多次连接(JOIN),性能稍差。
数据模型耦合较紧,当表结构发生变更时,影响范围较大。

查询模型

在这里插入图片描述
用户表和订单表的关系为:一个用户有多个订单,一个订单只属于一个用户,一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单。

实现方式

数据库约束

外键约束(FOREIGN KEY)确保子表的外键值必须是主表中存在的主键值。

级联操作

ON DELETE CASCADE:如果删除主表中的记录,子表中的相关记录也会被删除。
ON UPDATE CASCADE:如果主表中的主键被更新,子表中的外键也会相应更新。

对应特点

  • 单向性:一侧是“一个”,另一侧是“多个”。
  • 关联约束:多的一侧的每条记录只能关联到一的一侧的一条记录,但一的一侧可以关联多条记录。
  • 典型场景:用户与订单(一个用户可以有多个订单)、学校与学生(一所学校可以有多个学生)。

创建表

表之前已经创建出来了。这里跳过了。

插入数据

数据之前已经写入。这里跳过了。

查询语句

select *,o.id oid from wzk_user u left join wzk_orders o on u.id=o.uid;

执行结果如下所示:
在这里插入图片描述

创建类

实体类已经创建了,这里跳过。
但是需要进行修改。

WzkUser

@Data
@AllArgsConstructor
@NoArgsConstructor
public class WzkUser {private int id;private String username;private String password;private Date birthday;private List<WzkOrder> orderList;
}

对应的截图如下所示:
在这里插入图片描述

UserMapper

public interface UserMapper {List<WzkUser> findAll();
}

对应的截图如下所示:
在这里插入图片描述

UserMapper.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="icu.wzk.mapper.UserMapper"><resultMap id="userMap" type="icu.wzk.model.WzkUser"><result column="id" property="id"></result><result column="username" property="username"></result><result column="password" property="password"></result><result column="birthday" property="birthday"></result><collection property="orderList" ofType="icu.wzk.model.WzkOrder"><result column="oid" property="id"></result><result column="ordertime" property="ordertime"></result><result column="total" property="total"></result></collection></resultMap><select id="findAll" resultMap="userMap">select *,o.id oid from wzk_user u left join wzk_orders o on u.id=o.uid;</select>
</mapper>

对应的截图如下所示:
在这里插入图片描述

sqlMapConfig.xml

现在注意,记得修改sqlMapConfig 文件。

<mappers><mapper resource="mapper.xml"/><mapper resource="OrderMapper.xml"/><mapper resource="UserMapper.xml"/>
</mappers>

对应的截图如下所示:
在这里插入图片描述

编写代码

public class WzkIcu09 {public static void main(String[] args) throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<WzkUser> dataList = userMapper.findAll();dataList.forEach(System.out::println);sqlSession.close();}
}

编写的代码截图如下所示:
在这里插入图片描述
运行结果
控制台运行结果如下所示:

24/11/12 17:12:41 DEBUG UserMapper.findAll: <==      Total: 3
WzkUser(id=1, username=wzk, password=icu, birthday=Mon Nov 11 00:00:00 CST 2024, orderList=[WzkOrder(id=1, ordertime=Mon Nov 11 00:00:00 CST 2024, total=100.0, user=null), WzkOrder(id=2, ordertime=Mon Nov 11 00:00:00 CST 2024, total=200.0, user=null)])
WzkUser(id=2, username=wzk2, password=icu2, birthday=Mon Nov 11 00:00:00 CST 2024, orderList=[WzkOrder(id=3, ordertime=Sun Nov 10 00:00:00 CST 2024, total=150.0, user=null)])

对应的控制台如下所示:
在这里插入图片描述

优化与注意事项

索引优化

为外键字段添加索引以提高查询性能。

数据完整性

外键约束确保数据一致性,但在高并发场景下可能降低性能,因此可以选择通过程序逻辑维护。

设计扩展性

考虑未来是否会转变为多对多关系(例如:一个订单包含多个商品),在设计时预留扩展空间。

暂时小结

总结来说,一对多模型是关系型数据库中最基本、最常用的关系之一,它清晰地表达了实体间的层级关系。通过合理设计表结构、优化查询和索引,可以高效管理和操作这些数据关系。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词