`
getclass
  • 浏览: 43908 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

银行主数据项目(MDM)的数据持久层,你选择hibernate还是ibatis(MyBatis)

阅读更多

一个银行的主数据项目.数据数据持久层的实现上一直有争议.不知道,大家有没有什么好的建议.

主数据项目的模型设计,不是像交易类型的模型偏向三范式的.
举一个简单的场景,提供几个过滤条件,根据过滤条件查询结果并展现.这个数据的收集和过滤可能要涉及十几张表.

hibernate对这个功能的实现要用十几张表,就要用到十几个对象.这样提供过滤,并要整理清楚对象间的逻辑关系.对程序员的要求相对要高些.
如果用ibatis的话,程序员在ETL人员的协助下,一条sql就能很快解决问题.难度下降了不少.

另一个角度,性能上.hibernate的常用优化是第三方的二级缓存技术.可是,十几张表的关联几百万的数据量,自动生成的sql会有或多或少的问题.不如直接sql来的直接,可以在数据库层面直接优化.sql优化,索引,表分区等.

想听听大家对这个问题的看法 
分享到:
评论
68 楼 Technoboy 2011-06-24  
我们公司,FX外汇交易系统,数据库是MySQL,确实用的Hibernate,但无关联表,
67 楼 lwz5910 2011-06-24  
技术没有好坏之分,要看用的人,用的场景等一系列的影响因素,要综合考量,而不是主观论断XX技术不行,举一个场景:要是客户一定要求用Hibernate或者Mybatis,你会反其道而行?
66 楼 池中物 2011-06-24  
liuwenjun05101 写道
支持mybatis
hibernate一般适合两种人,一种就是对hibernate非常了解的人,一种就是sql菜鸟,但是我相信一个团队非常了解hibernate的人还是极少的,像sql菜鸟来写东西,存在很大风险


sql菜鸟还能用ibatis?
65 楼 liuwenjun05101 2011-06-23  
支持mybatis
hibernate一般适合两种人,一种就是对hibernate非常了解的人,一种就是sql菜鸟,但是我相信一个团队非常了解hibernate的人还是极少的,像sql菜鸟来写东西,存在很大风险
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>
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>
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>
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>
60 楼 getclass 2011-06-13  
友情提示:MyBatis的annotation,不支持复杂sql映射.(比如:嵌套 Join 映射)
59 楼 梦秋雨 2011-06-13  
george_space 写道
supben 写道
http://robbin.iteye.com/blog/24529

这是06年得老帖了,现在早已今非昔比。

06年的iBatis是不是“简陋”,我不知道,因为那时候我还在使用Hibernate,08年以后才开始用iBatis。
但是现在的MyBatis,早已不是“简陋”这两个字就能概括的了。


什么时候把数据库SQL层面上的分页这个事情内置了,然后再来谈简陋不简陋吧。
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>
57 楼 george_space 2011-06-13  
supben 写道
http://robbin.iteye.com/blog/24529

这是06年得老帖了,现在早已今非昔比。

06年的iBatis是不是“简陋”,我不知道,因为那时候我还在使用Hibernate,08年以后才开始用iBatis。
但是现在的MyBatis,早已不是“简陋”这两个字就能概括的了。
56 楼 supben 2011-06-13  
一个是ormapping ,一个是sql mapping。你的项目需要ORM不?
55 楼 supben 2011-06-13  
http://robbin.iteye.com/blog/24529
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
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>
52 楼 梦秋雨 2011-06-13  
另外,用不用Hibernate我觉得很大一个因素是考量数据结构的稳定性。不同的项目情况不同,显然不能一概而论说就是行或者不行。
51 楼 梦秋雨 2011-06-13  
<p>
</p>
<p style="margin: 0px;"><span style="color: #ff0000; font-size: small;">不知道你说的“真正的系统”是什么玩意,我所知道的是我做的项目的确存在诸如用户、日志这样的窄表。或许您做的系统中每个表都是200来个字段吧。另外save/update在hibernate的级联下单表不单表是无所谓的。——额,默认你用过。</span></p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"><span style="color: #3366ff; font-size: small;">问:你的用户表有多窄,不会只有一个用户名跟密码吧?用户表不需要关联角色表、权限表、角色-权限映射表、部门表、职位表……这一堆东西么?级联?如果你的系统大量使用级联、触发器这样的数据库设计,成为“富DB”化的设计,我只能说:你把复杂的问题丢给了数据库,而不是Hibernate。如果只用Hibernate来操作一下日志表,它确实能胜任,哪个持久层框架不能胜任一个对业务统计精准性要求不高的区区的单表操作呢?</span></p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">你不知道我说的级联是什么东西。推荐去看文档。</span></p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"><span style="color: #ff0000; font-size: small;">Hibernate做更新,基于JPA的注解映射实体类,对于绝大多数实体类只需要写很少的配置即可完成。您的mybatis要把一个查询映射到一个模型对象要写的mapping又如何,开发人员花心思对属性名和字段名,维护xml?复杂关联对象的映射又如何?</span></p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"><span style="color: #3366ff; font-size: small;">难道你没听说过MyBatis官方提供的生成器?</span></p>
<p style="margin: 0px;"><span style="color: #3366ff; font-size: small;">另外,MyBatis的SQL是可以写在Mapper类得annotation中的,维护你所说的属性名-字段名映射,比Hibernate复杂不到哪去。</span></p>
<p style="margin: 0px;"><span style="color: #3366ff; font-size: small;">复杂关联对象的映射?MyBatis手册中有专门一个章节来讲对象类型属性映射和集合类型属性的映射,我不觉得MyBatis处理对象类型的属性和集合类型的属性有多复杂,起码我可以自由控制从子表“拉”过来几个字段,按照什么条件“拉过来”。我可以对自己写的SQL语句竭尽所能地优化。</span></p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">你又跑偏了,查询我也是倾向于ibatis的。此外,招聘人员的时候,能够熟练应用hibernate annotation定义映射的人,远多于能够熟练使用mybatis annotation的人。</span></p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"><span style="color: #ff0000; font-size: small;">另外,拿最原始的jdbc做查询,自己分析resultset做转换能不能搞定ibatis搞定的所有问题?那么既然jdbc能搞定ibatis能解决的和解决不了的所有问题,那么您是不是该用jdbc呢?或者直接用socket去和数据库通信?</span></p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"><span style="color: #3366ff; font-size: small;">既然MyBatis已经做好了JDBC结果集和实体类的映射,为什么要自己再折腾一次?难道自己折腾的一定能比MyBatis效率要高?</span></p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"><span style="color: #008000; font-size: small;">没看明白这是反语?hib的映射比ibatis简单,那为什么要用ibatis呢。注意我主要说的是更新的场景。你可以写两个有关联的实体类比比两个方案映射配置代码量。</span></p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"><strong>3、“</strong></p>
<div class="quote_title" style="font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;">梦秋雨 写道</div>
<div class="quote_div" style="margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 15px; background-color: #fafafa; padding: 3px; border: 1px solid #cccccc;">
<div class="quote_title" style="font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;">evanzzy 写道</div>
<div class="quote_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>
50 楼 damoqiongqiu 2011-06-13  
电信行业,好久不用Hibernate的淡淡飘过
自从有了IBatis,从未感觉到Hibernate有什么好
尤其大数据量、实时性要求高的系统
49 楼 george_space 2011-06-13  
<div class="quote_title">梦秋雨 写道</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">
<div class="quote_title">getclass 写道</div>
<div class="quote_div">
<div class="quote_title">梦秋雨 写道</div>
<div class="quote_div">
<div class="quote_title">evanzzy 写道</div>
<div class="quote_div">动钱的系统绝不能用hibernate,切记切记。IBatis或Spring JdbcTemplate都可以</div>
<br><br>这种自己没用明白于是觉得不好用,然后就出来喷的人……<br><br>本人所处项目持久层使用Hibernate+Ibatis,Ibatis做查询、统计、报表,Hibernate负责更新、保存。20人+的项目,也走的很顺利。<br><br>另,该项目里面是要算钱的。</div>
<p> </p>
<p>还可以这么架构呢,什么情况.兄弟们来说说这个吧.</p>
</div>
<p> </p>
<p>Service里面注入两个Dao,一个Hibernate的,一个Ibatis的。提供一系列查询方法:findXxByNamedQuery,我们抛弃了hibernate的namedQuery,service提供的namedQuery方法一律使用ibatis做查询,第一个参数就是ibatis select的名称,返回结果大多数是Map&lt;String,Object&gt;的集合。Ibatis主要使用与如下场景:</p>
<p> </p>
<p>1.宽表或者复杂关联情况下的列表页面展现,要展现的列数远小于实体类的属性个数,使用ibatis减少无谓的加载</p>
<p>2.针对某一db的sql优化</p>
<p>3.报表、统计等用sql来做比较自然的东西</p>
<p> </p>
<p>所以只是用了ibatis的查询,基本上没有用它的映射。</p>
<p> </p>
<p>Hibernate负责窄表管理,以及绝大多数的save/update。</p>
</div>
<p><br>好,现在就说说道理:</p>
<p><strong>1、“Hibernate负责窄表管理,以及绝大多数的save/update”</strong></p>
<p>问:一个真正的系统中,有多少应用是“窄表”增删改查,我做过的系统,多数情景下是多表联查、多表复杂统计、save/update也很少是单表操作的;</p>
<p> </p>
<p><span style="color: #ff0000; font-size: small;">不知道你说的“真正的系统”是什么玩意,我所知道的是我做的项目的确存在诸如用户、日志这样的窄表。或许您做的系统中每个表都是200来个字段吧。另外save/update在hibernate的级联下单表不单表是无所谓的。——额,默认你用过。</span></p>
<p> </p>
<p><span style="color: #3366ff; font-size: small;">问:你的用户表有多窄,不会只有一个用户名跟密码吧?用户表不需要关联角色表、权限表、角色-权限映射表、部门表、职位表……这一堆东西么?级联?如果你的系统大量使用级联、触发器这样的数据库设计,成为“富DB”化的设计,我只能说:你把复杂的问题丢给了数据库,而不是Hibernate。如果只用Hibernate来操作一下日志表,它确实能胜任,哪个持久层框架不能胜任一个对业务统计精准性要求不高的区区的单表操作呢?</span></p>
<p> </p>
<p> </p>
<p><strong>2、“Service里面注入两个Dao,一个Hibernate的,一个Ibatis的。针对某一db的sql优化报表、统计等用sql来做比较自然的东西……”</strong></p>
<p>问:是不是Hibernate搞不定,或者说不容易搞定的部分,使用iBatis来搞定?如果是,既然iBatis可以搞定简单部分,也可以搞定Hibernate搞不定(或者说不容易搞定)的部分,那么为什么不直接使用iBatis(现在已经是<strong>MyBatis</strong>了),要Hibernate何用?</p>
<p> </p>
<p><span style="color: #ff0000; font-size: small;">Hibernate做更新,基于JPA的注解映射实体类,对于绝大多数实体类只需要写很少的配置即可完成。您的mybatis要把一个查询映射到一个模型对象要写的mapping又如何,开发人员花心思对属性名和字段名,维护xml?复杂关联对象的映射又如何?</span></p>
<p> </p>
<p><span style="color: #3366ff; font-size: small;">难道你没听说过MyBatis官方提供的生成器?</span></p>
<p><span style="color: #3366ff; font-size: small;">另外,MyBatis的SQL是可以写在Mapper类得annotation中的,维护你所说的属性名-字段名映射,比Hibernate复杂不到哪去。 </span></p>
<p><span style="color: #3366ff; font-size: small;">复杂关联对象的映射?MyBatis手册中有专门一个章节来讲对象类型属性映射和集合类型属性的映射,我不觉得MyBatis处理对象类型的属性和集合类型的属性有多复杂,起码我可以自由控制从子表“拉”过来几个字段,按照什么条件“拉过来”。我可以对自己写的SQL语句竭尽所能地优化。</span></p>
<p> </p>
<p><span style="color: #ff0000; font-size: small;">另外,拿最原始的jdbc做查询,自己分析resultset做转换能不能搞定ibatis搞定的所有问题?那么既然jdbc能搞定ibatis能解决的和解决不了的所有问题,那么您是不是该用jdbc呢?或者直接用socket去和数据库通信?</span></p>
<p> </p>
<p><span style="color: #3366ff; font-size: small;">既然MyBatis已经做好了JDBC结果集和实体类的映射,为什么要自己再折腾一次?难道自己折腾的一定能比MyBatis效率要高?</span></p>
<p> </p>
<p><strong>3、“</strong></p>
<div class="quote_title">梦秋雨 写道</div>
<div class="quote_div">
<div class="quote_title">evanzzy 写道</div>
<div class="quote_div">动钱的系统绝不能用hibernate,切记切记。IBatis或Spring JdbcTemplate都可以</div>
<br><br>这种自己没用明白于是觉得不好用,然后就出来喷的人……<br><br>……”</div>
<p>问:既然你弄明白了,说说你“动钱”的部分是怎么用Hibernate来“弄明白的”,简单举个例子:查询A省所有储蓄卡金额不足306元,并且持续时间6个月以上,并且在本行开户多于2次的男性用户的前三个月的交易总额、支出总额和存入总额……</p>
<p>类似这样的查询,在实际的系统中n多,使用hibernate,我真不知道如何方便地搞定而又不需要查出一堆多余的数据。表结构都是设计好的,不要说什么细颗粒度的小表这类的前提,真正的系统中,不可能给你三两个字段做一个表。</p>
<p> </p>
<p><span style="color: #ff0000; font-size: small;">我们查询用的是Ibatis。</span></p>
<p><span style="background-color: #ffcc99; color: #3366ff; font-size: small;">那就不用讨论了,我也主张MyBatis。</span></p>
<p>--------------------------------------------------------------------------------------------------------------------------</p>
<p> </p>
<p>如果不在Hibernate中使用原生SQL语句,只纯粹让Hibernate面向对象去挑大梁,那无异于开着坦克爬梯子;</p>
<p>如果在Hibernate应用中大量使用原生SQL,那为什么不直接使用MyBatis,将SQL统一安放在Mapper文件中,或者annotation中,同时做到了数据集和实体类的映射,实现了面向对象方式直接操作SQL。</p>
<p> </p>
<p>直接使用Spring JDBCTemplate 也比Hibernate + 原生SQL,或者 Hibernate + MyBatis混搭 这样的设计要好。</p>
<p> </p>
<p><span style="color: #ff0000; font-size: small;">技术选型要兼顾设计目标和团队人员情况,而且每个框架都有其适用范围,也许在你所在的团队里面你的做法是合适的,但是你无法判断我所在团队的情况。另外,一棒子打死全世界目前使用人数最多的o/r mapping框架,真是认为举世皆浊你独清啊。</span></p>
<p><span style="color: #0000ff; font-size: small;">我也没建议你用MyBatis啊,我只是个人觉得:银行类、电信类应用,持久层最好使用MyBatis,Hibernate自己纯面向对象的方式是很难搞定的。</span></p>
<p> </p>
<p><strong>以上是个人愚见。</strong></p>
<p> </p>
</div>
<p> </p>
<p><span style="color: #ff0000; font-size: x-small;"><br></span></p>
</div>
<p> </p>

相关推荐

    主数据管理(MDM)项目建设落地方案 .docx

    主数据管理(MDM)项目建设落地方案 主数据管理(MDM)项目建设落地方案是企业信息化建设的关键组件之一。该方案旨在解决大型企业面临的多个业务系统难以统一管理的问题和生产运营难管理的痛点。 Step 1: 立标准 ...

    主数据管理(MDM)与元数据管理

    主数据管理(Master Data Management,MDM)与元数据管理是IT行业中两个至关重要的概念,它们在企业数据治理中扮演着核心角色。主数据管理旨在确保企业关键业务实体(如客户、产品、供应商等)的一致性和准确性,而...

    MDM主数据管理平台功能架构图PPT课件.pptx

    MDM主数据管理平台功能架构图PPT课件 MDM(Master Data Management)主数据管理平台是企业信息化建设中的一种重要系统,旨在对企业的主数据进行集中管理、集成和共享。该平台主要功能架构图PPT课件对MDM主数据管理...

    mdm.rar_MDM_MDM主数据管理_java MDM

    MDM,全称为Master Data Management,即主数据管理,是企业信息化建设中的关键部分,它主要负责维护和管理企业核心业务实体的数据,如客户、产品、供应商等。这些数据是企业运营的基础,确保其准确、一致和及时对于...

    主数据管理MDM详细介绍

    主数据管理(Master Data Management,MDM)是企业信息化建设中的关键组成部分,旨在确保核心业务实体数据在整个企业内的准确、一致和可控。主数据主要包括客户、供应商、账户、组织单位等对企业运营至关重要的数据...

    【主数据管理】大型集团企业主数据管理(MDM)平台建设方案WORD.docx

    大型集团企业主数据管理(MDM)平台建设方案是为了实现集团统一主数据管理,整合财务组织、会计科目、银行账号、客户、供应商、项目等主数据,达到主数据的梳理、整合、管控。该方案涵盖了主数据管理平台的建设目标...

    主数据管理MDM解决方案

    主数据管理MDM解决方案 MDM为继承和管理参考数据提供免代码、低维护的解决方案。在MDM系统成为数据仓库的维数据的确定来源后,它使数据仓库能够侧重于卷管理和数据交付的数据管理目标。 简而言之,主数据管理提供...

    主数据管理平台MDM7.0.1-用户操作手册-v3.1.1.doc

    ### 一、主数据管理平台(MDM)概览 #### 1.1 登录系统 **环境要求:** - **硬件配置:** 对于MDM7.0.1的运行,通常需要满足一定的硬件标准,例如处理器速度、内存大小以及存储空间等。 - **软件环境:** 包括操作...

    《SAP MDM主数据管理》 PDF (2/2)

    伴随着大数据、云计算、移动化等先进技术的应用和推广,主数据管理在这个词在企业信息管理领域经常被谈起,且目前SAPMDM是一个较新的模块,国内对于熟练掌握该模块的顾问需求量日益增大 介绍SAPMDM产品的第一本...

    主数据管理(MDM)系统应用建议

    此外,MDM项目不仅涉及技术层面的数据整合,还需要数据专员和管理员的参与,他们负责确保全企业范围内实现主数据的统一视图。通过MDM,企业可以提高决策效率,减少错误,增强内外部协作,为数字化转型提供坚实的数据...

    数据治理MDM主数据管理元数据管理系统建设方案PPT资料(19份).zip

    ERP主数据与业务数据关系.pptx Informatica主数据管理建设方案74.ppt Oracle-MDM主数据管理方案(28页).pptx Oracle_MDM基础架构解决方案.pptx XX药业主数据管理平台项目建议.pptx 中国移动NG2-BASS 3.5元数据管理v...

    MDM企业主数据管理解决方案.pdf

    MDM企业主数据管理解决方案 Oracle MDM 企业主数据管理解决方案旨在帮助企业解决主数据挑战,提供一个统一、完整、准确的主数据管理解决方案。该解决方案可以从多个业务系统中整合最核心的、需要共享并保持一致的...

    MDM 主数据管理系统

    MDM(Master Data Management,主数据管理)是企业信息化建设中的关键组成部分,它旨在确保组织内的核心业务数据的一致性、准确性和完整性。MDM系统主要用于整合和管理那些跨部门、跨系统的共享数据,如客户信息、...

    集团公司主数据(mdm)治理总体解决方案MDM.pptx

    ### 集团公司主数据(MDM)治理总体解决方案 #### 一、背景与挑战 随着企业规模的不断扩大,集团公司面临着数据管理方面的一系列挑战。这些挑战主要体现在以下几个方面: 1. **数据分散**:数据分布在不同的业务...

    【主数据管理】大型集团公司主数据管理(MDM)平台建设方案WORD.docx

    - **统一管理**:构建集团统一的主数据管理平台,确保财务组织、会计科目、银行账号、往来单位、项目等关键主数据得到有效的梳理、整合和管控。 - **流程与功能配置**:实现主数据流程和功能的配置与开发,包括但不...

    SAP_MDM主数据管理

    SAP公司,MDM主数据管理的说明,使用说明

    XX制造业大数据项目之产品主数据蓝图方案【112页PPT】.pptx

    在XX制造业的大数据项目中,产品主数据蓝图方案是一项至关重要的工作,它涉及到企业的核心数据管理和运营效率。产品主数据是制造业的灵魂,它涵盖了描述产品各个方面稳定且唯一的信息,如品牌、型号、配置等,服务于...

    主数据管理MDM系统规划方案集团

    关于某一个集团主数据管理DMD系统规划方案:从术语、主数据管理系统建设思路、管理工作建议、标准化、经验总结与交流,实施方法论、比较完善的集团主数据系统规范方案。

Global site tag (gtag.js) - Google Analytics