SSM框架下,级联数据库表的访问查询

本文探讨在SSM框架下如何快速通过子级查询父级的数据库表。通常采用在子级表存储父级ID的方式,但会增加查询次数。作者通过实验比较了原始方法、添加额外字段和合并字段三种方案,权衡空间占用和查询效率,旨在找到最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SSM框架下,级联数据库表的访问查询

级联数据库表

在日常的软件设计中,多级联动的数据库表比较常见,如省市联动的数据,对这些数据按级分表的方式存储,以表示数据之间的包含关系。
一般情况下,不会使用外键将父、子级的数据库表进行关联,因为当需要对某个数据进行删除操作时,这个数据就需要数据库级联操作来去除对子表的影响,而这些操作的开销会很大(级数越多,开销越大)。
而解决这个问题的常用方法,就是在子级表中添加一个字段,存入对应父级表的id值,类似链表。

此设计,便于增加和更新操作,减小各级的耦合,类似于链表的结构,可以最大程度的减少对数据的修改。但空间的优化,导致的缺点毫无疑问的就是时间的牺牲。即当需要通过子级查询更上级的父级数据时,需要发起多次的查询。(子→父→爷)
例如: 通过一个商品,查询它所属的一级分类?(商品→N级分类…→三级分类→二级分类→一级分类)

如何快速通过子级查询父级?

下面进行一个粗糙的实验,使用SSM框架+MySQL+Junit,进行四级的级联查询(四级分类→三级分类→二级分类→一级分类),下例中均以一级分类作查询最终目标。

1.目前最原始的结构如下:
在这里插入图片描述
为了方便这里简化数据表的结构,对其重复进行10000次的查询,通过System.currentTimeMillis();记录时间差,当然由于Mybatis的一级缓存,使得这样重复查询的耗时、访问次数减少,这里粗糙地表现数据库的访问次数。

while (rount>=0){
   
            //实际上向数据库发起了4次查询
            FouthL fouth = dao.findFouth(1);
            ThirdL third = dao.findThird(fouth.getThird_id());
            SecondL secon
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值