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

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

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

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

各位是怎么看的?

41388 次点击
所在节点    Java
47 条回复
jsou
2016-11-23 17:01:04 +08:00
从来不用 JPA.不要让简单的事情变复杂.
有学习 JPA 的时间,能封装好几套 ORM 框架出来了.
shoaly
2016-11-23 17:15:38 +08:00
jpa 这种在 数据写入的时候 可读性很高
数据查询的时候 一般普通查询 可读性也很高, 连表查询也很优雅
复杂查询的时候 我还是喜欢 sql
Camile
2016-11-23 18:33:07 +08:00
@jsou ...是吗?我觉得 JPA 还算简单的
eamon666
2016-11-23 18:57:04 +08:00
那么 JPA 是什么
guoziyan
2016-11-23 19:00:22 +08:00
JPA 可以结合 sql 语句的 。使用 @Query 注解
shakala
2016-11-23 19:01:15 +08:00
使用 Mybatis 的路过。。。表示不知道 JPA 怎么玩
EXE
2016-11-23 19:12:41 +08:00
Jpa 多表操作就傻眼了
zacard
2016-11-23 19:21:19 +08:00
也没到反人类的地步,有时候挺好用的。
murmur
2016-11-23 19:28:59 +08:00
Mybatis 对于稍微会写 sql 的都没问题
caixiexin
2016-11-23 19:30:32 +08:00
多表查询时怎么办呢,复杂 SQL 语句怎么办呢,让 dba 优化 SQL 的时候怎么办呢。
每次用这类 orm 框架,碰到复杂的业务头就痛。
还是 mybatis 能直接看到 SQL 语句舒服。。
Camile
2016-11-23 19:33:14 +08:00
@eamon666 可以具像理解为 Hibernate 吧..因为 JPA 就是一个标准
@guoziyan 那个应该是 HQL 了吧?
@EXE 写 HQL 可破吧..
@zacard 是的。所以有点楞逼
@murmur 想起以前面试时当面给写复杂 SQL ,瞬间 SB 了
Lpl
2016-11-23 19:34:01 +08:00
多表操作用 queryDsl ,单表操作一般就是 JPA 。比如: public List<User> findByNameLikeOrderByIdDESC(name, orderBy)。
Camile
2016-11-23 19:34:23 +08:00
@caixiexin 不是可以写 HQL 吗? dba 优化倒的确是一个痛点
jsou
2016-11-23 19:36:30 +08:00
@Camile 复杂是指的过度设计.

从 jdbc->jdbctemplate->hibernation/mybatis 再到 jpa,真当开发人员的学习时间不要钱.

我觉得到 h/m 这一级的封装已经有点过了,再往深处走就有病了.

自己写个 orm 框架,几千行代码,多表\级联\校验\注解\日志\代码生成之类的都能实现了,还能按项目特性去保障性能.
就我自己做过的项目来说,会依据数据库可能出现的最坏场景,然后对我们自己写的 orm 框架进行一些微调,想怎么改就怎么改.用那些重量级框架,特殊需求满足不了\不小心出个 bug 能干翻 99%的开发人员\遇到性能问题都没处说理去.
Camile
2016-11-23 19:39:30 +08:00
@jsou 造轮子的人值得钦佩
caixiexin
2016-11-23 19:39:37 +08:00
@Camile 主要用 hql 的话,我觉得还不如直接上 mybatis 了,起码开发的时候代码中的 SQL 语句复制粘贴出来改下参数就能用了,放到 MySQL 中调试也方便。
jpa 或 hibernate 这类 orm 框架,团队中没有一个懂得多的大牛的话,感觉暗抗很多的。
Camile
2016-11-23 19:46:44 +08:00
@caixiexin 你说得也有一定的道理
greatghoul
2016-11-23 19:50:33 +08:00
@caixiexin 相比 JPA ,我觉得真正懂 SQL 的人更少。
zonghua
2016-11-23 21:37:46 +08:00
@caixiexin 但事实上 xml 里面的语句写了一大堆套件判断
eriale
2016-11-23 21:47:13 +08:00
JPA 在最基本的 CRUD 场景下很好用,如果是跟 Spring boot 一起用,上手非常快。
前几天看到一个技术博客推荐的 mybatis 自动 sql 生成: https://piaoniu.io/pndaokai-yuan-liao/,提供的功能也就是 JPA 的子集。

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

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

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

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

© 2021 V2EX