很简单举了例子说:一个数据库如果有 50 个字段,那你写各种条件查询不是要写很多?就是应该用类似 SQL 的方式来查询啊。(感觉是挺 MyBatis 派 or 喜欢写 HQL
但是事实情况似乎并不是如此,我认为 JPA 很好用开发效率很高,最多就是打日志的时候 SQL 有点恶心。
各位是怎么看的?
1
jsou 2016-11-23 17:01:04 +08:00
从来不用 JPA.不要让简单的事情变复杂.
有学习 JPA 的时间,能封装好几套 ORM 框架出来了. |
2
shoaly 2016-11-23 17:15:38 +08:00
jpa 这种在 数据写入的时候 可读性很高
数据查询的时候 一般普通查询 可读性也很高, 连表查询也很优雅 复杂查询的时候 我还是喜欢 sql |
4
eamon666 2016-11-23 18:57:04 +08:00
那么 JPA 是什么
|
6
shakala 2016-11-23 19:01:15 +08:00
使用 Mybatis 的路过。。。表示不知道 JPA 怎么玩
|
7
EXE 2016-11-23 19:12:41 +08:00
Jpa 多表操作就傻眼了
|
8
zacard 2016-11-23 19:21:19 +08:00
也没到反人类的地步,有时候挺好用的。
|
9
murmur 2016-11-23 19:28:59 +08:00
Mybatis 对于稍微会写 sql 的都没问题
|
10
caixiexin 2016-11-23 19:30:32 +08:00 via Android
多表查询时怎么办呢,复杂 SQL 语句怎么办呢,让 dba 优化 SQL 的时候怎么办呢。
每次用这类 orm 框架,碰到复杂的业务头就痛。 还是 mybatis 能直接看到 SQL 语句舒服。。 |
11
Camile OP |
12
Lpl 2016-11-23 19:34:01 +08:00
多表操作用 queryDsl ,单表操作一般就是 JPA 。比如: public List<User> findByNameLikeOrderByIdDESC(name, orderBy)。
|
14
jsou 2016-11-23 19:36:30 +08:00 1
@Camile 复杂是指的过度设计.
从 jdbc->jdbctemplate->hibernation/mybatis 再到 jpa,真当开发人员的学习时间不要钱. 我觉得到 h/m 这一级的封装已经有点过了,再往深处走就有病了. 自己写个 orm 框架,几千行代码,多表\级联\校验\注解\日志\代码生成之类的都能实现了,还能按项目特性去保障性能. 就我自己做过的项目来说,会依据数据库可能出现的最坏场景,然后对我们自己写的 orm 框架进行一些微调,想怎么改就怎么改.用那些重量级框架,特殊需求满足不了\不小心出个 bug 能干翻 99%的开发人员\遇到性能问题都没处说理去. |
16
caixiexin 2016-11-23 19:39:37 +08:00 via Android
@Camile 主要用 hql 的话,我觉得还不如直接上 mybatis 了,起码开发的时候代码中的 SQL 语句复制粘贴出来改下参数就能用了,放到 MySQL 中调试也方便。
jpa 或 hibernate 这类 orm 框架,团队中没有一个懂得多的大牛的话,感觉暗抗很多的。 |
18
greatghoul 2016-11-23 19:50:33 +08:00
@caixiexin 相比 JPA ,我觉得真正懂 SQL 的人更少。
|
20
eriale 2016-11-23 21:47:13 +08:00
JPA 在最基本的 CRUD 场景下很好用,如果是跟 Spring boot 一起用,上手非常快。
前几天看到一个技术博客推荐的 mybatis 自动 sql 生成: https://piaoniu.io/pndaokai-yuan-liao/,提供的功能也就是 JPA 的子集。 |
21
Miy4mori 2016-11-24 03:19:25 +08:00 via Android 1
纯用 jpa 是挺麻烦的,但是很 oo ,这就导致有些人懒得学懒得看,所以 jpa 不受待见……
|
22
georgema1982 2016-11-24 08:50:42 +08:00
@jsou 想法很天真。你觉得你自己开发的 orm 框架将来不需要维护吗?维护不需要成本吗?如何保证性能和正确性?我用过一些公司自己的设计的 orm 框架,比开源 orm 框架难用不说,还有各种资源泄露的严重系统级 bug 。
|
24
jsou 2016-11-24 09:24:24 +08:00
@georgema1982 如何保证性能和正确性这个问题用在开源 orm 上也一样合适,回答不了,我只能说自己写的代码可掌控程度高一点.
@imcj orm 框架不像 spring,orm 只是面对数据持久化,没多少知识点,要装也不用这个装.已 block(v2 好像流行这个?) |
25
LancerXin 2016-11-24 10:12:08 +08:00
这个问题就像月经帖一样 每个月都会被提那么几次。
|
26
gowk 2016-11-24 10:25:19 +08:00 via Android
用过,不太喜欢,可能功力不够,还是喜欢 Mybatis ,不过 JPA 规范那套接口设计的真他妈漂亮...
|
27
ericls 2016-11-24 10:28:11 +08:00
我觉得用 DSL 是个很好的平衡
|
28
markme 2016-11-24 11:25:37 +08:00
JPA 这种标准只适合写 DEMO ,当然你也可以通过各种方式去实现多表复杂查询,但是为什么不用 Mybatis ?
|
29
yeyuexia 2016-11-24 11:33:11 +08:00
233 这个时候可以推一下我们自己搞的一个基于 jpa 的封装了,大家有兴趣可以来试试嘛. 不过目前该框架只是对 query 进行封装,并不支持 join 查询。
https://github.com/elvis-liu/yaz |
30
chocotan 2016-11-24 12:24:01 +08:00
跟楼主想法一样, JPA 很好用开发效率很高,且无需关心底层数据库
但是遇到要优化 sql 的时候就.....我水平不够 在国内貌似很不受待见+1 ,不知道国外是怎么样的 ,以前看 youtube 上的 spring boot 讲座的时候,也是用的 jpa 呀 mybatis 可以用 mybatis-generator 生成 mapper ,缺点是生成的代码太多了,且数据库有变动的时候需要重新生成,自从用了这个后很少写 sql 语句了 |
31
imxiaozhi 2016-11-24 12:41:09 +08:00
其实 jpa 还是挺方便的,也可以自定义复杂 sql
|
32
leopku 2016-11-24 13:02:17 +08:00 2
慈禧第一次听说轮船不用牛拉的时候,认为那玩意真 TM low
|
34
sampeng 2016-11-24 15:16:05 +08:00
sql 的全称是什么?请大声读出来!!!
|
35
danngo2455 2016-11-24 15:52:51 +08:00
JOOQ 是一个很好的平衡点
|
36
teemoer 2016-11-25 09:39:24 +08:00
![]( )
![]( ) 啪啪啪 |
37
georgema1982 2016-11-26 04:50:23 +08:00
@jsou 如果对“性能和正确性”的回答是“不知到”的话,这已经足够说明用自己所谓控制性高的自制框架的问题所在了
|
38
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 遇到静态化.没踩坑的时候总觉得它们千般好,踩过坑后,被它们浪费的时间,一个轮子造好了. 乐此不疲的造轮子的人都是从坑里爬出来的. |
39
q397064399 2016-11-30 14:47:58 +08:00
@jsou 小项目都自己造轮子,老板的开发成本 瞬间上升啊
|
40
q397064399 2016-11-30 14:49:10 +08:00
@jsou 不过 Hibernate 确实太重了,学习起来成本太高了,只用 JPA 实现一些多表的功能又十分麻烦
|
41
q397064399 2016-11-30 15:06:49 +08:00
@jsou Struts2 用的多么?
|
42
niweicumt 2016-12-16 17:20:27 +08:00
口味选择啦,话说我也比较倾向 MyBatis
|
43
hantsy 2016-12-19 12:36:25 +08:00 1
JPA 几乎是我所有 Java EE 项目中作为 Persistence 的首选。
@danngo2455 JOOQ 对 JDBC 操作来讲不错,在一些场合我也会用到。另外就是 QueryDSL 的对纯 SQL / JPA 等的支持也相当不错。 MyBatis 我永远都不会再选择。 Batis 在进入 Apache 前用过一次(当然 Batis 后来在 Apache 呆不住了),还不如 Spring Jdbc Template 简洁,为什么要用它? 开发时我们要考虑: 1. OOP 首先必须满足面向对象的要求,而不是要面向数据库。 2. 最近几年的项目,都是必须满足 Typesafe 查询,这些在 Hibernate , JPA , JOOQ , Query DSL 都支持得很好。 3. 权衡数据库和 OOP 对象设计。 问过身边一些使用 MyBatis 的人,为什么喜欢它?理由很简单,只会一点 SQL , MyBatis 拿就可以上手。一个共同点,没系统的学习过 Java 和 Java EE ,大多数连 Oracle 官方的 Java 和 Java EE 教程都没读过,更不说是读一本完整的书去系统学习知识,好不用说系统学习 JPA 了,平时写代码也就是只会一些 Copy 的工作。 |
45
hantsy 2016-12-20 12:06:23 +08:00
|
47
ConradG 2018-01-25 16:39:18 +08:00
JPA 随着系统复杂度上升,可读性下降的很快(注解的通病),性能上也并不多亮眼。系统规模小且简单的话属于不错的选择。
|