论坛首页 Java企业应用论坛

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

浏览 49374 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-06-13  

不知道你说的“真正的系统”是什么玩意,我所知道的是我做的项目的确存在诸如用户、日志这样的窄表。或许您做的系统中每个表都是200来个字段吧。另外save/update在hibernate的级联下单表不单表是无所谓的。——额,默认你用过。

 

问:你的用户表有多窄,不会只有一个用户名跟密码吧?用户表不需要关联角色表、权限表、角色-权限映射表、部门表、职位表……这一堆东西么?级联?如果你的系统大量使用级联、触发器这样的数据库设计,成为“富DB”化的设计,我只能说:你把复杂的问题丢给了数据库,而不是Hibernate。如果只用Hibernate来操作一下日志表,它确实能胜任,哪个持久层框架不能胜任一个对业务统计精准性要求不高的区区的单表操作呢?

 

你不知道我说的级联是什么东西。推荐去看文档。

 

 

Hibernate做更新,基于JPA的注解映射实体类,对于绝大多数实体类只需要写很少的配置即可完成。您的mybatis要把一个查询映射到一个模型对象要写的mapping又如何,开发人员花心思对属性名和字段名,维护xml?复杂关联对象的映射又如何?

 

难道你没听说过MyBatis官方提供的生成器?

另外,MyBatis的SQL是可以写在Mapper类得annotation中的,维护你所说的属性名-字段名映射,比Hibernate复杂不到哪去。

复杂关联对象的映射?MyBatis手册中有专门一个章节来讲对象类型属性映射和集合类型属性的映射,我不觉得MyBatis处理对象类型的属性和集合类型的属性有多复杂,起码我可以自由控制从子表“拉”过来几个字段,按照什么条件“拉过来”。我可以对自己写的SQL语句竭尽所能地优化。

 

你又跑偏了,查询我也是倾向于ibatis的。此外,招聘人员的时候,能够熟练应用hibernate annotation定义映射的人,远多于能够熟练使用mybatis annotation的人。

 

另外,拿最原始的jdbc做查询,自己分析resultset做转换能不能搞定ibatis搞定的所有问题?那么既然jdbc能搞定ibatis能解决的和解决不了的所有问题,那么您是不是该用jdbc呢?或者直接用socket去和数据库通信?

 

既然MyBatis已经做好了JDBC结果集和实体类的映射,为什么要自己再折腾一次?难道自己折腾的一定能比MyBatis效率要高?

 

没看明白这是反语?hib的映射比ibatis简单,那为什么要用ibatis呢。注意我主要说的是更新的场景。你可以写两个有关联的实体类比比两个方案映射配置代码量。

 

3、“

梦秋雨 写道
evanzzy 写道
动钱的系统绝不能用hibernate,切记切记。IBatis或Spring JdbcTemplate都可以


这种自己没用明白于是觉得不好用,然后就出来喷的人……

……”

问:既然你弄明白了,说说你“动钱”的部分是怎么用Hibernate来“弄明白的”,简单举个例子:查询A省所有储蓄卡金额不足306元,并且持续时间6个月以上,并且在本行开户多于2次的男性用户的前三个月的交易总额、支出总额和存入总额……

类似这样的查询,在实际的系统中n多,使用hibernate,我真不知道如何方便地搞定而又不需要查出一堆多余的数据。表结构都是设计好的,不要说什么细颗粒度的小表这类的前提,真正的系统中,不可能给你三两个字段做一个表。

 

我们查询用的是Ibatis。

那就不用讨论了,我也主张MyBatis。

--------------------------------------------------------------------------------------------------------------------------

 

如果不在Hibernate中使用原生SQL语句,只纯粹让Hibernate面向对象去挑大梁,那无异于开着坦克爬梯子;

如果在Hibernate应用中大量使用原生SQL,那为什么不直接使用MyBatis,将SQL统一安放在Mapper文件中,或者annotation中,同时做到了数据集和实体类的映射,实现了面向对象方式直接操作SQL。

 

直接使用Spring JDBCTemplate 也比Hibernate + 原生SQL,或者 Hibernate + MyBatis混搭 这样的设计要好。

 

技术选型要兼顾设计目标和团队人员情况,而且每个框架都有其适用范围,也许在你所在的团队里面你的做法是合适的,但是你无法判断我所在团队的情况。另外,一棒子打死全世界目前使用人数最多的o/r mapping框架,真是认为举世皆浊你独清啊。

我也没建议你用MyBatis啊,我只是个人觉得:银行类、电信类应用,持久层最好使用MyBatis,Hibernate自己纯面向对象的方式是很难搞定的。

 

恩,我说事实,我身处电信行业,3kw+的项目,使用我前面提到的技术方案,用hib简化了大多数场景下的更新,用ibatis原始sql精准的控制查询,项目很成功。所以我觉得这个方案还是可以的。在人力、效率、性能各方面算是一个比较好的均衡。Hibernate不是银弹,不可能搞定所有的事情,同样Ibatis也不是。是以趋利避害,各取其长。

0 请登录后投票
   发表时间:2011-06-13  
另外,用不用Hibernate我觉得很大一个因素是考量数据结构的稳定性。不同的项目情况不同,显然不能一概而论说就是行或者不行。
0 请登录后投票
   发表时间:2011-06-13  
梦秋雨 写道

  

你不知道我说的级联是什么东西。推荐去看文档。

 

你说的级联,不是Hibernate级联删除、更新么?和数据库表的直接级联删除有区别么?求解?

 

 

 

恩,我说事实,我身处电信行业,3kw+的项目,使用我前面提到的技术方案,用hib简化了大多数场景下的更新,用ibatis原始sql精准的控制查询,项目很成功。所以我觉得这个方案还是可以的。在人力、效率、性能各方面算是一个比较好的均衡。Hibernate不是银弹,不可能搞定所有的事情,同样Ibatis也不是。是以趋利避害,各取其长。

 

我不觉得Hibernate 能简化什么开发,你说iBatis和Hibernate“各取其长”,这样谁还能反驳你呢,因为你根本没有选择自己的论点,难道你的论点是“iBatis + Hibernate就是我所主张的持久层方案”?

 

0 请登录后投票
   发表时间:2011-06-13  
george_space 写道
梦秋雨 写道

  

你不知道我说的级联是什么东西。推荐去看文档。

 

你说的级联,不是Hibernate级联删除、更新么?和数据库表的直接级联删除有区别么?求解?

 

 

 

恩,我说事实,我身处电信行业,3kw+的项目,使用我前面提到的技术方案,用hib简化了大多数场景下的更新,用ibatis原始sql精准的控制查询,项目很成功。所以我觉得这个方案还是可以的。在人力、效率、性能各方面算是一个比较好的均衡。Hibernate不是银弹,不可能搞定所有的事情,同样Ibatis也不是。是以趋利避害,各取其长。

 

我不觉得Hibernate 能简化什么开发,你说iBatis和Hibernate“各取其长”,这样谁还能反驳你呢,因为你根本没有选择自己的论点,难道你的论点是“iBatis + Hibernate就是我所主张的持久层方案”?

 


http://robbin.iteye.com/blog/24529
0 请登录后投票
   发表时间:2011-06-13  
http://robbin.iteye.com/blog/24529
0 请登录后投票
   发表时间:2011-06-13  
一个是ormapping ,一个是sql mapping。你的项目需要ORM不?
0 请登录后投票
   发表时间:2011-06-13   最后修改:2011-06-13
supben 写道
http://robbin.iteye.com/blog/24529

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

06年的iBatis是不是“简陋”,我不知道,因为那时候我还在使用Hibernate,08年以后才开始用iBatis。
但是现在的MyBatis,早已不是“简陋”这两个字就能概括的了。
0 请登录后投票
   发表时间:2011-06-13   最后修改:2011-06-13
supben 写道
george_space 写道
梦秋雨 写道

 

你不知道我说的级联是什么东西。推荐去看文档。

 

你说的级联,不是Hibernate级联删除、更新么?和数据库表的直接级联删除有区别么?求解?

 

Hib的级联和数据库的级联没有区别么?用hib的级联是把复杂性给了db?

 

 

恩,我说事实,我身处电信行业,3kw+的项目,使用我前面提到的技术方案,用hib简化了大多数场景下的更新,用ibatis原始sql精准的控制查询,项目很成功。所以我觉得这个方案还是可以的。在人力、效率、性能各方面算是一个比较好的均衡。Hibernate不是银弹,不可能搞定所有的事情,同样Ibatis也不是。是以趋利避害,各取其长。

 

我不觉得Hibernate 能简化什么开发,你说iBatis和Hibernate“各取其长”,这样谁还能反驳你呢,因为你根本没有选择自己的论点,难道你的论点是“iBatis + Hibernate就是我所主张的持久层方案”?

 

我的论点就是ibatis+hibernate,用ibatis作查询,用hib做保存更新,你反驳了半天不知道我的论点?这也需要“难道”?

 

你不觉得hib能简化开发的话,那么分别写一个ibatis和hibernate的映射比一下。依赖别人和自己掌握细节是一个平衡杆,robin所说的也是这个方面,并不是"hibernate不能简化开发“。

 


http://robbin.iteye.com/blog/24529

 

0 请登录后投票
   发表时间:2011-06-13   最后修改:2011-06-13
george_space 写道
supben 写道
http://robbin.iteye.com/blog/24529

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

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


什么时候把数据库SQL层面上的分页这个事情内置了,然后再来谈简陋不简陋吧。
0 请登录后投票
   发表时间:2011-06-13  
友情提示:MyBatis的annotation,不支持复杂sql映射.(比如:嵌套 Join 映射)
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics