spring data jpa明明很不错了,为什么现在还是这么多人吹mybatis?

2021-07-30 16:17:13 浏览数 (1)

作者:kane君 链接:https://www.zhihu.com/question/438832773/answer/1691336666 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

jpa确实很不错了,这两个框架也都没必要吹,只是要看具体的场景,选择合适的

既然问题问的是mybatis,那我给个简化过的场景,随手写的没有验证,大家简单扫一眼,知道意思就好了


CREATE TABLE class

(

id long,

name text

) comment '班级表';

CREATE TABLE student

(

id long,

class_id long

) comment '学生表';

CREATE TABLE course

(

id long,

name text

) comment '课程表';

CREATE TABLE exam

(

id long,

course_id long

) comment '考试表';

CREATE TABLE score

(

student_id long,

exam_id long,

val double

) comment '成绩表';

# 统计每个班级的各科累积成绩的平均值(仅统计有成绩的学生)

SELECT c.name,

co.name,

SUM(s.val) / COUNT(DISTINCT IF(s.val IS NOT NULL, st.id, NULL))

FROM score s

LEFT JOIN student st ON st.id = s.student_id

LEFT JOIN exam e ON e.id = s.exam_id

LEFT JOIN course co ON co.id = e.course_id

LEFT JOIN class c on c.id = st.class_id

GROUP BY c.id, c.name, co.id, co.name

ORDER BY c.name, co.name


这个场景已经非常努力的简化过了,看看最后那句sql,想想这种东西jpa如果不用 nativeQuery 的话得写多少行代码才能实现?

如果用 nativeQuery 的话,它比 mybatis 更优吗?

在我遇到的真实场景里,没有学生,也没有考试,更没有这样简单

事实上在那个场景里随便拉出一句sql就有上百行,整个项目到处都有类似的统计代码,不说人读起来吃力,就连机器构建语法树都要等上好一会

为什么人和机器读起来都吃力?因为这个场景用的真的就是jpa,真的就是 nativeQuery 在 java 文件里写了几千行,就这还是重构后的结果

在重构之前,那位程序员写的倒是更面向对象,把每条记录都查出来,在jvm做聚合运算.......每一个运算步骤之后jpa都会带着上千个参数回数据库里查询...想想就恐怖

0 人点赞