前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring data jpa明明很不错了,为什么现在还是这么多人吹mybatis?

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

原创
作者头像
用户8639654
修改2021-07-30 16:17:13
1.3K0
修改2021-07-30 16:17:13
举报
文章被收录于专栏:云计算运维

作者: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都会带着上千个参数回数据库里查询...想想就恐怖

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档