今天和面试官聊到 DAO 层时,面试官表示 JPA 很反人类

2016-11-23 16:29:20 +08:00
 Camile

很简单举了例子说:一个数据库如果有 50 个字段,那你写各种条件查询不是要写很多?就是应该用类似 SQL 的方式来查询啊。(感觉是挺 MyBatis 派 or 喜欢写 HQL

但是事实情况似乎并不是如此,我认为 JPA 很好用开发效率很高,最多就是打日志的时候 SQL 有点恶心。

各位是怎么看的?

41413 次点击
所在节点    Java
47 条回复
Miy4mori
2016-11-24 03:19:25 +08:00
纯用 jpa 是挺麻烦的,但是很 oo ,这就导致有些人懒得学懒得看,所以 jpa 不受待见……
georgema1982
2016-11-24 08:50:42 +08:00
@jsou 想法很天真。你觉得你自己开发的 orm 框架将来不需要维护吗?维护不需要成本吗?如何保证性能和正确性?我用过一些公司自己的设计的 orm 框架,比开源 orm 框架难用不说,还有各种资源泄露的严重系统级 bug 。
imcj
2016-11-24 09:12:28 +08:00
@jsou 故意找喷的?无脑装逼
jsou
2016-11-24 09:24:24 +08:00
@georgema1982 如何保证性能和正确性这个问题用在开源 orm 上也一样合适,回答不了,我只能说自己写的代码可掌控程度高一点.

@imcj orm 框架不像 spring,orm 只是面对数据持久化,没多少知识点,要装也不用这个装.已 block(v2 好像流行这个?)
LancerXin
2016-11-24 10:12:08 +08:00
这个问题就像月经帖一样 每个月都会被提那么几次。
gowk
2016-11-24 10:25:19 +08:00
用过,不太喜欢,可能功力不够,还是喜欢 Mybatis ,不过 JPA 规范那套接口设计的真他妈漂亮...
ericls
2016-11-24 10:28:11 +08:00
我觉得用 DSL 是个很好的平衡
markme
2016-11-24 11:25:37 +08:00
JPA 这种标准只适合写 DEMO ,当然你也可以通过各种方式去实现多表复杂查询,但是为什么不用 Mybatis ?
yeyuexia
2016-11-24 11:33:11 +08:00
233 这个时候可以推一下我们自己搞的一个基于 jpa 的封装了,大家有兴趣可以来试试嘛. 不过目前该框架只是对 query 进行封装,并不支持 join 查询。
https://github.com/elvis-liu/yaz
chocotan
2016-11-24 12:24:01 +08:00
跟楼主想法一样, JPA 很好用开发效率很高,且无需关心底层数据库
但是遇到要优化 sql 的时候就.....我水平不够

在国内貌似很不受待见+1 ,不知道国外是怎么样的 ,以前看 youtube 上的 spring boot 讲座的时候,也是用的 jpa 呀
mybatis 可以用 mybatis-generator 生成 mapper ,缺点是生成的代码太多了,且数据库有变动的时候需要重新生成,自从用了这个后很少写 sql 语句了
imxiaozhi
2016-11-24 12:41:09 +08:00
其实 jpa 还是挺方便的,也可以自定义复杂 sql
leopku
2016-11-24 13:02:17 +08:00
慈禧第一次听说轮船不用牛拉的时候,认为那玩意真 TM low
ZiLong
2016-11-24 13:19:52 +08:00
@leopku 哈哈,给你一百个赞
sampeng
2016-11-24 15:16:05 +08:00
sql 的全称是什么?请大声读出来!!!
danngo2455
2016-11-24 15:52:51 +08:00
JOOQ 是一个很好的平衡点
teemoer
2016-11-25 09:39:24 +08:00
![]( )

![]( )

啪啪啪
georgema1982
2016-11-26 04:50:23 +08:00
@jsou 如果对“性能和正确性”的回答是“不知到”的话,这已经足够说明用自己所谓控制性高的自制框架的问题所在了
jsou
2016-11-26 15:08:26 +08:00
@georgema1982 性能和正确性这个问题,你去问任何一个框架,谁能三言两语的回答了.没有生产环境的检验,说明不了什么.
仅就 hibernate/mybatis 来说:
性能就从来不和 hibernate 搭边,对 hibernate 也不多说什么,我从参加工作开始,公司的所有项目选型中没人考虑过它;
mybatis 我也有在项目中用过,遇到最让我记忆深刻的问题就是一样的数据,一样的代码,在批量 insert 的时候当数据量到一定程度时,oracle10g 上报错,oracle11g 正常,手工执行 sql 没任何问题.一行一行调试源码找到问题所正,花掉的时间能打两场麻将了.

虽然造轮子一开始是浪费时间,但当遇到底层框架 bug 时,怎么可能有自己写的更得心应手.
当然我是指那些功能域单一的"小框架".像 spring 这种,没能力动它,只能乖乖的被它上.

不少[功能域单一的"小框架"]我所在的项目团队宁愿自己造轮子,也不愿再跳它们的坑,不仅仅是 orm.比如像:mina 遇到 cglib,atmosphere 遇到 weblogic,shiro 遇到静态化.没踩坑的时候总觉得它们千般好,踩过坑后,被它们浪费的时间,一个轮子造好了.

乐此不疲的造轮子的人都是从坑里爬出来的.
q397064399
2016-11-30 14:47:58 +08:00
@jsou 小项目都自己造轮子,老板的开发成本 瞬间上升啊
q397064399
2016-11-30 14:49:10 +08:00
@jsou 不过 Hibernate 确实太重了,学习起来成本太高了,只用 JPA 实现一些多表的功能又十分麻烦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/322705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX