单一职责关于SQL和JAVA中业务逻辑的问题

来源:3-5 单一职责原则讲解

慕沐3161652

2018-10-01

听完老师讲到单一职责, 我想到一个工作中的问题,
例如一个列表查询功能:

可能该查询功能里面需要关联到了多张, 5,6,7,8张表的字段, 还有可能里面会有其它操作(例如分组聚合, 计算)

1. 方法一: SQL

select a.xx, b.xx, c.xx from a 
left join b on xx 
left join c on xx
// 分组聚合, 计算等.  

2. 方法二: Java

List aList = aRepository.queryList();
List bList = bRepository.queryListWhereXxIn(List params);
List cList = cRepository.queryListWhereXxIn(List params);
// TODO : 对aList, bList, cList进行分组, 计算, 拼装等
return resultList;

对于这两种方式, 也就是很多人经常讨论的业务逻辑到底写在sql里还是service代码里.

我没有通过大量的测试数据去测试究竟哪种速度快,
我想知道, 就从职责上看, 数据库适合于数据的简单存取, 持久化. DAO层方法尽可能的单一
而java代码(service)更适合于组合数据, 做业务逻辑和计算, 所以我喜欢方式二.
我想知道对吗? 老师

写回答

2回答

birdskyws

2018-12-21

第一种方法好,数据库可以做查询优化,在查询的时候根据数据库统计信息计算先做那部分join。数据库可以做谓词下推,实现分库分表。如果用java替代mysql,需要你对自己的数据库很清楚,先做的join可以优化查询。

1
0

慕用2754118

2018-10-05

类似这种场景太常见了。说说我的想法探讨下。

方式二,虽然业务逻辑放到了Java代码中处理,但是会多次建立数据库连接,理所应当的会慢吧。

我觉得应该是方式一和方式二再结合下。

首先,避免反复建立数据库连接,一次查询就查询出所有的源数据,但是分组,拼装,计算等放到内存中计算。

0
0

Java设计模式精讲-Debug方式+内存分析

系统学习设计原则,设计模式,锤炼编码内功,赢取高薪Offer

3430 学习 · 407 问题

查看课程