身披 java 工程师的皮工作了两年,今天才发现对 hibernate 了解的太少太少了~ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ren2881971
V2EX    Java

身披 java 工程师的皮工作了两年,今天才发现对 hibernate 了解的太少太少了~

  •  
  •   ren2881971
    ren2881971 2014-09-10 21:14:39 +08:00 9298 次点击
    这是一个创建于 4114 前的主题,其中的信息可能已经有所发展或是发生改变。
    一直都是直接写sql 用jdbc操作数据库。
    工作时间大多数也是在专研业务知识或者维护老系统。
    对hibernate的了解还停留在刚毕业的时候。
    一直以为对hibernate都很不屑~ 觉得没有直接操作sql灵活,而且性能较差
    结果最近一个项目我脑袋短路了。突然想用SSH来完成。
    发现hibernate也没那么简单~(也可能是以前我用得不对~) 以前太小看他了...


    比如:
    关系映射 many-to-one
    比如:
    二级缓存
    53 条回复    2014-09-12 10:59:34 +08:00
    zava
        1
    zava  
       2014-09-10 21:52:17 +08:00
    JPA 不是正道, 围绕着 SQL 转,又没有 SQL 的表现力.
    ren2881971
        2
    ren2881971  
    OP
       2014-09-10 22:17:50 +08:00
    @zava 平时都是直接写sql的。 但是公司现在总想着兼容多数据库。 这本身就是矛盾的。
    当然也不排除我sql 写够了 想用用hibernate尝尝鲜。。
    rayu
        3
    rayu  
       2014-09-10 22:25:56 +08:00
    最近刚加入一家新公司,经理居然规定死了只能用spring data jpa,各种难受,借lz帖子吐槽一下。
    ren2881971
        4
    ren2881971  
    OP
       2014-09-10 22:27:59 +08:00
    @rayu 欢迎吐槽~ 话说spring 那个jpa 好用么? 前一阵我们组长搭了一套 spring mvc + spring core + spring jpa + spring security的环境~
    我总感觉有点牵强附会,生用的感觉~
    unionx
        5
    unionx  
       2014-09-10 22:32:04 +08:00
    hibernate 大法好,自己写 sql 早晚被坑
    reeco
        6
    reeco  
       2014-09-10 22:41:04 +08:00
    我喜欢直接写SQL
    ren2881971
        7
    ren2881971  
    OP
       2014-09-10 22:48:28 +08:00
    @unionx 这个要看 sql掌握的程度和是否需要跨数据库 根据实际应用来度量的。
    不是什么大法就用那个的。 再说hibernate目前在哪儿都被黑出了翔吧
    suliuyes
        8
    suliuyes  
       2014-09-11 00:54:25 +08:00
    1:绝大多数项目都不需要跨数据库,你真的需要hibernate吗?跨了就没选择了。
    2:已经会sql了为什么还需要耗费心思学ORM框架?投资回报性价比高吗?确定不考虑mybatis?
    AIRPLAY
        9
    AIRPLAY  
       2014-09-11 08:22:50 +08:00
    @suliuyes 和ibatis什么关系?
    Aegwynn
        10
    Aegwynn  
       2014-09-11 08:32:15 +08:00
    @AIRPLAY 同一个东西,2010年由apache software foundation 迁移到了google code,并且改名为MyBatis
    bigzhu
        11
    bigzhu  
       2014-09-11 08:40:25 +08:00 via Android
    等被坑过你就知道这些orm有什么不好了。到一定数量级,必须写sql
    qq2511296
        12
    qq2511296  
       2014-09-11 08:49:52 +08:00   1
    查数据大的时候 不要用HQL 例如一些报表的查询的时候 尽量都用原生sql查询 效率会提高很多
    hcymk2
        13
    hcymk2  
       2014-09-11 09:18:17 +08:00
    把一个不太了解的工具当作银弹,万灵药,不坑你才怪。
    zouxcs
        14
    zouxcs  
       2014-09-11 09:23:20 +08:00
    习惯了自己写sql,经常用mybatis,配置简单。
    tflz514
        15
    tflz514  
       2014-09-11 09:25:21 +08:00
    ffffwh
        16
    ffffwh  
       2014-09-11 09:39:16 +08:00
    据说ORM被吐槽很多?谁顺手贴几篇文章给看看?
    kengle
        17
    kengle  
       2014-09-11 09:49:18 +08:00
    那么多人唱衰 orm 啊, orm 这东西是个好黑的箱子, 里面一堆的代码注入, 而且 bean 的管理好复杂, 特别是 hibernate, 一不小心就踩到坑.
    不过话说回来, 小项目用 orm 效果还是很好的, 等项目变大了再纯 sql 也不迟啊.
    gouflv
        18
    gouflv  
       2014-09-11 09:56:21 +08:00
    学习归学习, 真的试试就知道了
    hcymk2
        19
    hcymk2  
       2014-09-11 10:08:56 +08:00
    这是一篇很老的帖子
    http://www.iteye.com/topic/148055
    ren2881971
        20
    ren2881971  
    OP
       2014-09-11 10:35:58 +08:00
    @all 只是想尝试下而已~ 主要了解下以后找工作用的到啊~ 这个是肯定的。
    我个人还是喜欢直接操作sql
    @suliuyes 话说mybatis 是原生sql 直接操作数据库的是么? 跟dbutils 类型?
    ren2881971
        21
    ren2881971  
    OP
       2014-09-11 10:37:21 +08:00
    @ffffwh 只是听说~ 还没踩过坑。 本着no zuo bie 的 心里居然尝试下~
    gaicitadie
        22
    gaicitadie  
       2014-09-11 10:43:15 +08:00
    可能java语言本身繁琐不适合orm吧,歪个楼说说python和ruby框架中的orm,django和rails使用orm都很爽啊,写orm也会思考它生成的sql,但orm写起来要简洁清晰的多。
    ren2881971
        23
    ren2881971  
    OP
       2014-09-11 10:57:42 +08:00
    @gaicitadie 虽然你的头像是盖茨。。
    你说的那些语言都还没应用在企业开发。还都是互联网应用 网站 论坛啥的。 数据结构比较简单。
    也很少复杂关系的查询。所以才觉得爽吧~
    unionx
        24
    unionx  
       2014-09-11 11:07:03 +08:00
    @ren2881971 是有些黑点,但是还是有不少人最后老老实实去用了
    gaicitadie
        25
    gaicitadie  
       2014-09-11 11:14:04 +08:00
    @ren2881971 太过复杂关系的查询没做过,对many to one,many to many这些,django的orm用起来很方便,只需要select_related方法,就可以多表关联查询
    windyboy
        26
    windyboy  
       2014-09-11 11:23:29 +08:00
    和楼主相反
    玩了多年的对象操作以后
    我觉得还是写sql舒心
    ioth
        27
    ioth  
       2014-09-11 11:41:19 +08:00
    第二个境界,过了三个再谈感觉。
    qping
        28
    qping  
       2014-09-11 12:23:50 +08:00 via iPhone
    最早用jdbc,觉得hibernate好厉害,不用写sql,不用自己装配对象。后来用公司的框架,更牛逼,后台不用写,写写js就好。用多就吐了,还是mybatis好,既有掌握一切的感觉:写sql,又不能做那些苦力活:装配对象。

    hibernate实在是对他了解甚少,调用存储过程也是很麻烦,后台自动生成的sql也丑(这是最关键的),还是比较喜欢:越简单效率越高的
    seeker
        29
    seeker  
       2014-09-11 12:36:38 +08:00
    5年Java表示还没用过hibernate,,,感觉还是手写sql比较有安全感。
    HunterPan
        30
    HunterPan  
       2014-09-11 12:48:17 +08:00
    复杂的用sql,简单的hql。很鄙视hibernate,所以不愿意学习
    Narcissu5
        31
    Narcissu5  
       2014-09-11 12:52:15 +08:00
    很简单,你已经有SQL,为什么还需要HQL,Criteria 同理。

    我是很喜欢play2带的anorm,相当赞~
    TimLang
        32
    TimLang  
       2014-09-11 13:05:01 +08:00
    不做java好久,还是推荐ibatis,特别是公司里面有DBA的,保证不坑。
    小项目hibernate用用还可以,规模上去了,看起来不方便的sql未必会给你带来麻烦。。
    ren2881971
        33
    ren2881971  
    OP
       2014-09-11 13:35:46 +08:00
    好吧~ 看来大家还是对 hibernate 很排斥的态度。
    其实我只是会用而用~
    以免跳槽 被说连hibernate 都不会用~
    hcymk2
        34
    hcymk2  
       2014-09-11 13:52:52 +08:00
    loryyang
        35
    loryyang  
       2014-09-11 14:00:28 +08:00
    hibernate这种就是加速开发效率的,我觉得有条件的都可以使用,毕竟效率高。至于后期性能问题什么的,到时候再升级呗。没必要上来就高大上。另外说实话,你也不一定能做出高大上的东西来
    est
        36
    est  
       2014-09-11 14:11:54 +08:00
    sql 本质是什么,sql 本质就是本地代码远程通过RPC执行。orm本质是什么,orm本质是RPC的一种封装。

    and all wrappers are leaky.
    cougar
        37
    cougar  
       2014-09-11 14:12:34 +08:00
    各行各业比比皆是
    Lucups
        38
    Lucups  
       2014-09-11 14:19:34 +08:00
    没有好不好,只有合不合适。
    Lucups
        39
    Lucups  
       2014-09-11 14:20:02 +08:00
    小孩才分好坏,大人只看利弊。
    rayu
        40
    rayu  
       2014-09-11 14:44:19 +08:00
    jpa 学习成本维护高,不熟的还是不建议使用。
    rayu
        41
    rayu  
       2014-09-11 14:44:32 +08:00
    hibernate也是一个德行
    raychar
        42
    raychar  
       2014-09-11 15:01:46 +08:00
    只了解到一对多 多对一那些的程度,折腾很久,然后放弃。
    xiaowangge
        43
    xiaowangge  
       2014-09-11 17:53:30 +08:00
    公司的原则是:

    能不用 Hibernate(搭配 MySQL)就尽量不用。项目中几乎看不到 Hibernate 影子。

    我们使用腾讯云的 CMem 存储。
    robertlyc
        44
    robertlyc  
       2014-09-11 17:56:42 +08:00
    activerecord爆hibernate几十条马路
    ren2881971
        45
    ren2881971  
    OP
       2014-09-11 18:08:36 +08:00
    @robertlyc 你这我是没听过啊~
    ren2881971
        46
    ren2881971  
    OP
       2014-09-11 18:13:27 +08:00
    @qping 有空研究下~ spring mvc+ mybatis
    xuan_lengyue
        47
    xuan_lengyue  
       2014-09-11 19:02:15 +08:00
    ORM 少碰为妙,最近一个项目用了 Entity Framework,坑实在太多了。
    最大的一个问题是有些用 SQL 很轻松就实现的东西在 EF 里面非常难实现或者根本就没法实现。
    然后发现大部分数据层逻辑都用 EF 实现了,会有一种骑虎难下的感觉。
    wintersun
        48
    wintersun  
       2014-09-11 19:26:02 +08:00
    @Lucups 同意,没有银弹,只有适合。认清楚各种技术的优缺点,分析要实现的系统场景,裁裁剪剪,剪剪裁裁,终成大家!^_^
    ren2881971
        49
    ren2881971  
    OP
       2014-09-11 19:51:42 +08:00
    @xuan_lengyue orm 坑是一点。 更多情况是使用者没弄明白就开始瞎用了
    ren2881971
        50
    ren2881971  
    OP
       2014-09-11 20:12:15 +08:00
    第一个坑来了。。。
    hibernate的关系映射延迟加载 需要session在对象使用的时候一直开着。也就是一直持有session。
    但是spring 的DAO模式 HibernateTemplate 确在每个方法完毕后即关闭session。
    这两个结合一起绝壁了。
    这到底让不让我使用关系映射延迟加载啊!

    这用sql就是 查完父表 再查子表嘛~
    spacewander
        51
    spacewander  
       2014-09-12 09:51:23 +08:00
    @ren2881971 只用过Ruby的ActiveRecord和Python的SQLAlchemy的人表示……你说的东西也太复杂吧,完全听不懂……hibernate真是奇怪的orm。
    ren2881971
        52
    ren2881971  
    OP
       2014-09-12 10:28:45 +08:00
    @spacewander 唉 你们这些互联网程序员!
    ren2881971
        53
    ren2881971  
    OP
       2014-09-12 10:59:34 +08:00
    经过两天使用LZ 以身试法
    向大家展示了 no zuo no die why u try
    以后再也不用hibernate了。
    结贴!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5197 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 52ms UTC 07:46 PVG 15:46 LAX 23:46 JFK 02:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86