银行主数据项目(MDM)的数据持久层,你选择hibernate还是ibatis(MyBatis)
一个银行的主数据项目.数据数据持久层的实现上一直有争议.不知道,大家有没有什么好的建议.
主数据项目的模型设计,不是像交易类型的模型偏向三范式的.
举一个简单的场景,提供几个过滤条件,根据过滤条件查询结果并展现.这个数据的收集和过滤可能要涉及十几张表.
hibernate对这个功能的实现要用十几张表,就要用到十几个对象.这样提供过滤,并要整理清楚对象间的逻辑关系.对程序员的要求相对要高些.
如果用ibatis的话,程序员在ETL人员的协助下,一条sql就能很快解决问题.难度下降了不少.
另一个角度,性能上.hibernate的常用优化是第三方的二级缓存技术.可是,十几张表的关联几百万的数据量,自动生成的sql会有或多或少的问题.不如直接sql来的直接,可以在数据库层面直接优化.sql优化,索引,表分区等.
想听听大家对这个问题的看法
<div style="margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 15px; background-color: #fafafa; padding: 3px; border: 1px solid #cccccc;">
<div style="font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;">evanzzy 写道</div>
<div style="margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 15px; background-color: #fafafa; padding: 3px; border: 1px solid #cccccc;">动钱的系统绝不能用hibernate,切记切记。IBatis或Spring JdbcTemplate都可以</div>
<br><br>这种自己没用明白于是觉得不好用,然后就出来喷的人……<br><br>……”</div>
<p style="margin: 0px;">问:既然你弄明白了,说说你“动钱”的部分是怎么用Hibernate来“弄明白的”,简单举个例子:查询A省所有储蓄卡金额不足306元,并且持续时间6个月以上,并且在本行开户多于2次的男性用户的前三个月的交易总额、支出总额和存入总额……</p>
<p style="margin: 0px;">类似这样的查询,在实际的系统中n多,使用hibernate,我真不知道如何方便地搞定而又不需要查出一堆多余的数据。表结构都是设计好的,不要说什么细颗粒度的小表这类的前提,真正的系统中,不可能给你三两个字段做一个表。</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #ff0000; font-size: small;">我们查询用的是Ibatis。</span></p>
<p style="margin: 0px;"><span style="background-color: #ffcc99; color: #3366ff; font-size: small;">那就不用讨论了,我也主张MyBatis。</span></p>
<p style="margin: 0px;">--------------------------------------------------</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">如果不在Hibernate中使用原生SQL语句,只纯粹让Hibernate面向对象去挑大梁,那无异于开着坦克爬梯子;</p>
<p style="margin: 0px;">如果在Hibernate应用中大量使用原生SQL,那为什么不直接使用MyBatis,将SQL统一安放在Mapper文件中,或者annotation中,同时做到了数据集和实体类的映射,实现了面向对象方式直接操作SQL。</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">直接使用Spring JDBCTemplate 也比Hibernate + 原生SQL,或者 Hibernate + MyBatis混搭 这样的设计要好。</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #ff0000; font-size: small;">技术选型要兼顾设计目标和团队人员情况,而且每个框架都有其适用范围,也许在你所在的团队里面你的做法是合适的,但是你无法判断我所在团队的情况。另外,一棒子打死全世界目前使用人数最多的o/r mapping框架,真是认为举世皆浊你独清啊。</span></p>
<p style="margin: 0px;"><span style="color: #0000ff; font-size: small;">我也没建议你用MyBatis啊,我只是个人觉得:银行类、电信类应用,持久层最好使用MyBatis,Hibernate自己纯面向对象的方式是很难搞定的。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">恩,我说事实,我身处电信行业,3kw+的项目,使用我前面提到的技术方案,用hib简化了大多数场景下的更新,用ibatis原始sql精准的控制查询,项目很成功。所以我觉得这个方案还是可以的。在人力、效率、性能各方面算是一个比较好的均衡。Hibernate不是银弹,不可能搞定所有的事情,同样Ibatis也不是。是以趋利避害,各取其长。</span></p> 52 楼 梦秋雨 2011-06-13 另外,用不用Hibernate我觉得很大一个因素是考量数据结构的稳定性。不同的项目情况不同,显然不能一概而论说就是行或者不行。 53 楼 george_space 2011-06-13 <div class="quote_title">梦秋雨 写道</div>
<div class="quote_div">
<p>??</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">你不知道我说的级联是什么东西。推荐去看文档。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="background-color: #00ff00; color: #000000; font-size: small;">你说的级联,不是Hibernate级联删除、更新么?和数据库表的直接级联删除有区别么?求解?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">恩,我说事实,我身处电信行业,3kw+的项目,使用我前面提到的技术方案,用hib简化了大多数场景下的更新,用ibatis原始sql精准的控制查询,项目很成功。所以我觉得这个方案还是可以的。在人力、效率、性能各方面算是一个比较好的均衡。Hibernate不是银弹,不可能搞定所有的事情,同样Ibatis也不是。是以趋利避害,各取其长。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="background-color: #00ff00; color: #008000; font-size: small;">我不觉得Hibernate 能简化什么开发,你说iBatis和Hibernate“<span style="color: #ff6600;"><strong>各取其长</strong></span>”,这样谁还能反驳你呢,因为你根本没有选择自己的论点,难道你的论点是“iBatis + Hibernate就是我所主张的持久层方案”?</span></p>
</div>
<p>?</p> 54 楼 supben 2011-06-13 <div class="quote_title">george_space 写道</div><div class="quote_div"><div class="quote_title">梦秋雨 写道</div>
<div class="quote_div">
<p>??</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">你不知道我说的级联是什么东西。推荐去看文档。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="background-color: #00ff00; color: #000000; font-size: small;">你说的级联,不是Hibernate级联删除、更新么?和数据库表的直接级联删除有区别么?求解?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">恩,我说事实,我身处电信行业,3kw+的项目,使用我前面提到的技术方案,用hib简化了大多数场景下的更新,用ibatis原始sql精准的控制查询,项目很成功。所以我觉得这个方案还是可以的。在人力、效率、性能各方面算是一个比较好的均衡。Hibernate不是银弹,不可能搞定所有的事情,同样Ibatis也不是。是以趋利避害,各取其长。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="background-color: #00ff00; color: #008000; font-size: small;">我不觉得Hibernate 能简化什么开发,你说iBatis和Hibernate“<span style="color: #ff6600;"><strong>各取其长</strong></span>”,这样谁还能反驳你呢,因为你根本没有选择自己的论点,难道你的论点是“iBatis + Hibernate就是我所主张的持久层方案”?</span></p>
</div>
<p>?</p></div><br/>http://robbin.iteye.com/blog/24529 55 楼 supben 2011-06-13 http://robbin.iteye.com/blog/24529 56 楼 supben 2011-06-13 一个是ormapping ,一个是sql mapping。你的项目需要ORM不? 57 楼 george_space 2011-06-13 supben 写道http://robbin.iteye.com/blog/24529
这是06年得老帖了,现在早已今非昔比。
06年的iBatis是不是“简陋”,我不知道,因为那时候我还在使用Hibernate,08年以后才开始用iBatis。
但是现在的MyBatis,早已不是“简陋”这两个字就能概括的了。 58 楼 梦秋雨 2011-06-13 <div class="quote_title">supben 写道</div>
<div class="quote_div">
<div class="quote_title">george_space 写道</div>
<div class="quote_div">
<div class="quote_title">梦秋雨 写道</div>
<div class="quote_div">
<p>?</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">你不知道我说的级联是什么东西。推荐去看文档。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="background-color: #00ff00; color: #000000; font-size: small;">你说的级联,不是Hibernate级联删除、更新么?和数据库表的直接级联删除有区别么?求解?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #ff0000;">Hib的级联和数据库的级联没有区别么?用hib的级联是把复杂性给了db?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">恩,我说事实,我身处电信行业,3kw+的项目,使用我前面提到的技术方案,用hib简化了大多数场景下的更新,用ibatis原始sql精准的控制查询,项目很成功。所以我觉得这个方案还是可以的。在人力、效率、性能各方面算是一个比较好的均衡。Hibernate不是银弹,不可能搞定所有的事情,同样Ibatis也不是。是以趋利避害,各取其长。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="background-color: #00ff00; color: #008000; font-size: small;">我不觉得Hibernate 能简化什么开发,你说iBatis和Hibernate“<span style="color: #ff6600;"><strong>各取其长</strong></span>”,这样谁还能反驳你呢,因为你根本没有选择自己的论点,难道你的论点是“iBatis + Hibernate就是我所主张的持久层方案”?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">我的论点就是ibatis+hibernate,用ibatis作查询,用hib做保存更新,你反驳了半天不知道我的论点?这也需要“难道”?</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">你不觉得hib能简化开发的话,那么分别写一个ibatis和hibernate的映射比一下。依赖别人和自己掌握细节是一个平衡杆,robin所说的也是这个方面,并不是"hibernate不能简化开发“。</p>
</div>
<p>?</p>
</div>
<br>http://robbin.iteye.com/blog/24529</div>
<p>?</p> 59 楼 梦秋雨 2011-06-13 george_space 写道supben 写道http://robbin.iteye.com/blog/24529
这是06年得老帖了,现在早已今非昔比。
06年的iBatis是不是“简陋”,我不知道,因为那时候我还在使用Hibernate,08年以后才开始用iBatis。
但是现在的MyBatis,早已不是“简陋”这两个字就能概括的了。
什么时候把数据库SQL层面上的分页这个事情内置了,然后再来谈简陋不简陋吧。 60 楼 getclass 2011-06-13 友情提示:MyBatis的annotation,不支持复杂sql映射.(比如:嵌套 Join 映射) 61 楼 george_space 2011-06-13 <div class="quote_title">梦秋雨 写道</div>
<div class="quote_div">
<div class="quote_title">supben 写道</div>
<div class="quote_div">
<div class="quote_title">george_space 写道</div>
<div class="quote_div">
<div class="quote_title">梦秋雨 写道</div>
<div class="quote_div">
<p>?</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">你不知道我说的级联是什么东西。推荐去看文档。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="background-color: #00ff00; color: #000000; font-size: small;">你说的级联,不是Hibernate级联删除、更新么?和数据库表的直接级联删除有区别么?求解?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #ff0000;">Hib的级联和数据库的级联没有区别么?用hib的级联是把复杂性给了db?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">恩,我说事实,我身处电信行业,3kw+的项目,使用我前面提到的技术方案,用hib简化了大多数场景下的更新,用ibatis原始sql精准的控制查询,项目很成功。所以我觉得这个方案还是可以的。在人力、效率、性能各方面算是一个比较好的均衡。Hibernate不是银弹,不可能搞定所有的事情,同样Ibatis也不是。是以趋利避害,各取其长。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="background-color: #00ff00; color: #008000; font-size: small;">我不觉得Hibernate 能简化什么开发,你说iBatis和Hibernate“<span style="color: #ff6600;"><strong>各取其长</strong></span>”,这样谁还能反驳你呢,因为你根本没有选择自己的论点,难道你的论点是“iBatis + Hibernate就是我所主张的持久层方案”?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">我的论点就是ibatis+hibernate,用ibatis作查询,用hib做保存更新,你反驳了半天不知道我的论点?这也需要“难道”?</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">你不觉得hib能简化开发的话,那么分别写一个ibatis和hibernate的映射比一下。依赖别人和自己掌握细节是一个平衡杆,robin所说的也是这个方面,并不是"hibernate不能简化开发“。</p>
</div>
<p>?</p>
</div>
<br>http://robbin.iteye.com/blog/24529</div>
<p>?</p>
</div>
<p>"并不是"hibernate不能简化开发“。"</p>
<p>我给你你总结过robin这样的结论么?</p>
<p>robin怎么认为那是他 自己的观点,并不是robin说猴子没JJ,猴子就真的要憋死的。</p>
<p>?</p>
<p>既然你的观点是“ibatis+hibernate”,那你站在Hibernate? 和 MyBatis哪边都能说自己有“特点”,这跟没有自己的主张是一样的。所以支持Hibernate的一方和支持MyBatis的一方都不能跟你理论了,因为你两边都靠拢,这怎么讨论?</p> 62 楼 supben 2011-06-13 <div class="quote_title">george_space 写道</div>
<div class="quote_div">
<div class="quote_title">梦秋雨 写道</div>
<div class="quote_div">
<div class="quote_title">supben 写道</div>
<div class="quote_div">
<div class="quote_title">george_space 写道</div>
<div class="quote_div">
<div class="quote_title">梦秋雨 写道</div>
<div class="quote_div">
<p>?</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">你不知道我说的级联是什么东西。推荐去看文档。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="background-color: #00ff00; color: #000000; font-size: small;">你说的级联,不是Hibernate级联删除、更新么?和数据库表的直接级联删除有区别么?求解?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #ff0000;">Hib的级联和数据库的级联没有区别么?用hib的级联是把复杂性给了db?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">恩,我说事实,我身处电信行业,3kw+的项目,使用我前面提到的技术方案,用hib简化了大多数场景下的更新,用ibatis原始sql精准的控制查询,项目很成功。所以我觉得这个方案还是可以的。在人力、效率、性能各方面算是一个比较好的均衡。Hibernate不是银弹,不可能搞定所有的事情,同样Ibatis也不是。是以趋利避害,各取其长。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="background-color: #00ff00; color: #008000; font-size: small;">我不觉得Hibernate 能简化什么开发,你说iBatis和Hibernate“<span style="color: #ff6600;"><strong>各取其长</strong></span>”,这样谁还能反驳你呢,因为你根本没有选择自己的论点,难道你的论点是“iBatis + Hibernate就是我所主张的持久层方案”?</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">我的论点就是ibatis+hibernate,用ibatis作查询,用hib做保存更新,你反驳了半天不知道我的论点?这也需要“难道”?</p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;">你不觉得hib能简化开发的话,那么分别写一个ibatis和hibernate的映射比一下。依赖别人和自己掌握细节是一个平衡杆,robin所说的也是这个方面,并不是"hibernate不能简化开发“。</p>
</div>
<p>?</p>
</div>
<br>http://robbin.iteye.com/blog/24529</div>
<p>?</p>
</div>
<p>"并不是"hibernate不能简化开发“。"</p>
<p>我给你你总结过robin这样的结论么?</p>
<p>robin怎么认为那是他 自己的观点,并不是robin说猴子没JJ,猴子就真的要憋死的。</p>
<p>?</p>
<p>既然你的观点是“ibatis+hibernate”,那你站在Hibernate? 和 MyBatis哪边都能说自己有“特点”,这跟没有自己的主张是一样的。所以支持Hibernate的一方和支持MyBatis的一方都不能跟你理论了,因为你两边都靠拢,这怎么讨论?</p>
</div>
<p><br>我的观点是 “ibatis+hibernate“?</p> 63 楼 梦秋雨 2011-06-13 <div class="quote_title"><br></div>
<div class="quote_div">
<p>"并不是"hibernate不能简化开发“。"</p>
<p>我给你你总结过robin这样的结论么?</p>
<p>robin怎么认为那是他 自己的观点,并不是robin说猴子没JJ,猴子就真的要憋死的。</p>
<p>?</p>
<p>既然你的观点是“ibatis+hibernate”,那你站在Hibernate? 和 MyBatis哪边都能说自己有“特点”,这跟没有自己的主张是一样的。所以支持Hibernate的一方和支持MyBatis的一方都不能跟你理论了,因为你两边都靠拢,这怎么讨论?</p>
<p>?</p>
<p>?</p>
</div>
<p>?</p>
<p>
</p>
<p style="margin: 0px;"><span style="font-size: small;">大多数人讨论事情的时候引用别人的言论,是因为被引用的人有和自己的论点相近的结论,因而可以为辅助的论据。你说hibernate不能简化开发,然后又引用了robin的帖子,然后现在又说那是他自己的观点,与你的观点无关,你不觉得逻辑混乱么。</span></p>
<p style="margin: 0px;"><span style="font-size: small;"><br></span></p>
<p style="margin: 0px;"><span style="font-size: small;">我的主张是各取所长,揉合在一起使用,非得像你一样一棒子打死一边,然后把另外一边捧到天上去才叫有主张?再说了,我的观点一直都是不能一棒子打死任何一个东西,是您要来和我讨论,要一棒子打死hib(见本贴你的第一次回复)。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="font-size: small;">再说下去就只剩下嘴仗而没有什么值得看的内容了。over.</span></p> 64 楼 george_space 2011-06-13 <div class="quote_title">梦秋雨 写道</div>
<div class="quote_div">
<div class="quote_title"><span style="color: #ff0000;">这个是我说的,怎么引用时把我的名字给删除了????<br></span></div>
<div class="quote_div">
<p>"并不是"hibernate不能简化开发“。"</p>
<p>我给你你总结过robin这样的结论么?</p>
<p>robin怎么认为那是他 自己的观点,<span style="color: #ff0000;">并不是robin说猴子没JJ,猴子就真的要憋死的。</span></p>
<p>?</p>
<p>既然你的观点是“ibatis+hibernate”,那你站在Hibernate? 和 MyBatis哪边都能说自己有“特点”,这跟没有自己的主张是一样的。所以支持Hibernate的一方和支持MyBatis的一方都不能跟你理论了,因为你两边都靠拢,这怎么讨论?</p>
<p>?</p>
<p>?</p>
</div>
<p>?</p>
<p>?</p>
<p style="margin: 0px;"><span style="font-size: small;">大多数人讨论事情的时候引用别人的言论,是因为被引用的人有和自己的论点相近的结论,因而可以为辅助的论据。你说hibernate不能简化开发,然后又引用了robin的帖子,然后现在又说那是他自己的观点,与你的观点无关,你不觉得逻辑混乱么。</span></p>
<p style="margin: 0px;"><span style="font-size: small;"><br></span></p>
<p style="margin: 0px;"><span style="font-size: small;">我的主张是各取所长,揉合在一起使用,非得像你一样一棒子打死一边,然后把另外一边捧到天上去才叫有主张?再说了,我的观点一直都是不能一棒子打死任何一个东西,是您要来和我讨论,要一棒子打死hib(见本贴你的第一次回复)。</span></p>
<p style="margin: 0px;">?</p>
<p style="margin: 0px;"><span style="font-size: small;">再说下去就只剩下嘴仗而没有什么值得看的内容了。over.</span></p>
</div>
<p><span style="color: #339966; font-size: small;"><strong>robin的观点不是我引用的,我更<span style="background-color: #ffff99; color: #ff0000;">不认同</span>他的陈年老帖的观点。看清楚谁在拿robin的陈年老帖来为自己填充“论据”,ok?<br></strong></span></p>
<p><span style="color: #339966; font-size: small;"><strong>不要东一句引用,西一段戴错帽子。</strong></span></p>
<p><span style="color: #339966; font-size: small;"><strong></strong></span></p>
<p><span style="color: #339966; font-size: small;"><strong>在本贴中,我的观点自始至终都是一致,那就是:持久层采用MyBatis方案,肯定比采用Hibernate要好。不管是纯Hibernate,还是 Hibernate + X混搭。</strong></span></p>
<p><span style="color: #339966; font-size: small;">
<p><strong></strong></p>
</span></p> 65 楼 liuwenjun05101 2011-06-23 支持mybatis
hibernate一般适合两种人,一种就是对hibernate非常了解的人,一种就是sql菜鸟,但是我相信一个团队非常了解hibernate的人还是极少的,像sql菜鸟来写东西,存在很大风险 66 楼 池中物 2011-06-24 liuwenjun05101 写道支持mybatis
hibernate一般适合两种人,一种就是对hibernate非常了解的人,一种就是sql菜鸟,但是我相信一个团队非常了解hibernate的人还是极少的,像sql菜鸟来写东西,存在很大风险
sql菜鸟还能用ibatis?
67 楼 lwz5910 2011-06-24 技术没有好坏之分,要看用的人,用的场景等一系列的影响因素,要综合考量,而不是主观论断XX技术不行,举一个场景:要是客户一定要求用Hibernate或者Mybatis,你会反其道而行? 68 楼 Technoboy 2011-06-24 我们公司,FX外汇交易系统,数据库是MySQL,确实用的Hibernate,但无关联表,