问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernate与ibaties比较的优势何在?hibernate不能自己写sql?不能调存储过程吗?

发布网友 发布时间:2022-05-13 13:52

我来回答

3个回答

热心网友 时间:2023-10-11 10:58

ibatis:sql需要自己写
hibernate:sql自动生成
上面是最大的区别,下面是一些细节.
选择Hibernate还是iBATIS都有它的道理:
Hibernate的特点:
Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。以数据库字段一一对应映射得到的PO和Hibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行,但是Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS。
iBATIS的特点:
iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合。系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。
对于实际的开发进行的比较:
1. iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比 Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。
2. iBatis 可以进行细粒度的优化
比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis 很简单,执行一个sql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是用 Hibernate 的话就比较麻烦了,缺省的情况下 hibernate 会更新所有字段。 当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果。
例如:我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据库读很多数据,节省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...一般情况下Hibernate 会把所有的字段都选出来。比如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为什么要把他们也选出来呢?用hibernate 的话,你又不能把这两个不需要的字段设置为lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出ibatis 的好处了。如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对象 select 出来,然后再做 update。这对数据库来说就是两条sql。而iBatis只需要一条update的sql就可以了。减少一次与数据库的交互,对于性能的提升是非常重要。
3. 开发方面:
开发效率上,我觉得两者应该差不多。可维护性方面,我觉得 iBatis 更好一些。因为 iBatis 的 sql 都保存到单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保sql/hql。相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。 而iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用iBATIS 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而iBATIS 则要求开发者编写具体的SQL 语句。相对Hibernate而言,iBATIS 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。
4. 运行效率
在不考虑 cache 的情况下,iBatis 应该会比hibernate 快一些或者很多。
上面是hibernate和ibatis的区别。
现在说一说对于手写sql和存储过程的支持:
这些东西其实我们都不需要担心,这种框架能被大家接受就说明像这种功能那是必须的,一定要支持,否肯定被人扣板砖!
hibernate对手写sql和存储过程都有很好的支持,对于手写sql有的时候还是有必要的,如对于非常复杂的sql语句,可能对于我们用hql语句是很难完成的,这个时候就需要我们用sql来完成,相对于hql,我们还是比较熟练sql的!存储过程的支持也是必要的,和只需简单的一句:CallableStatement cstmt = con.prepareCall(procere); 就能对已有存储过程的调用。
ibatis这我就不多少了,一样,都有很好的支持。
存在就有其合理性,对于不同的情况,我们会有不同的解决方案,所以不要轻易的说那个那个功能不好,没准他就是你解决难题的杀手锏!

热心网友 时间:2023-10-11 10:58

hibernate和ibatiS两个框架呢都是数据持久化层的框架,
hibernate操作的是对象,也就是说你要是网表里添加一条记录,比如往student表中添加一个学生,就直接save(student)就可以了,但是你要是用ibatIS呢,你需要用sql语句去操作。
还有功能上hibernate比ibatIS庞大,比如hibernate支持JPA,而ibatiS还没有支持。这在开发效率上就比hibernate慢了点了。
hibernate不如ibatiS的方面就是扩展方面就没有ibatiS方便了,因为它已经对很多对数据库的操作封装的很好了,所以再扩展就没有那么方便了。而且ibatiS比较小,属于轻量级中的轻量级。

第二个问题,hibernate中写sql,存储过程?
这个问题其实你要想想就明白了。
sql我们以前是写在jdbc的链接中的,现在hibernate已经封装了jdbc的链接了,直接可以通过映射操作数据库了,你为什么还要写sql语句呢?也就是说人家已经封装了jdbc了,你为什么还要用jdbc呢,用个简单的例子就是说,算乘法,你可以笔算,也可以用计算器,为什么不用计算器呢。
说白了,sql语句你是可以写的,但是你要是写了,就把hibernate的最大的作用没用上,你说你还用hibernate做什么呢,直接用jdbc不就可以了么。

存储过程,这个问题其实我在最前面就已经分析了的,既然hibernate操作的是对象,你问什么还要批量存储对象呢,是吧?

所以存储过程是其他一些工具来完成的。

热心网友 时间:2023-10-11 10:59

List list = (List)getHibernateTemplate().executeWithNativeSession(new HibernateCallback(){
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query queryObject = session.createSQLQuery(sql);
return queryObject.list();
}
});
这个是 Hibernate中查询 sql 对应list的方法... 很多东西都是你不会所以你才说他不强大
Hibernate的强大地方在于所有的查询都是对实体进行的,不是单纯的sql查询然后在单个set get的
再就是你如果学学hibernate的 HQL 还有 离线查询你就知道他的强大了,Hibernate可以不写sql语句,所有的查询都是条件化的
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
dc.add(Restrictions.eq("name", "Tom"));
List l = getHibernateTemplate().findByCriteria(dc);
查询所有名字是 Tom 的,你想过查询可以这么写么?

没有好与不好之分 只有适合不适合一说
hibernate与ibaties比较的优势何在?hibernate不能自己写sql?不能调...

1. iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比 Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。2. iBatis 可以进行细粒度的优化 比如说我有一个...

java开发都需要学什么

最后一步,你需要学会使用数据库,mysql是个不错的入门选择,而且Java领域里主流的关系型数据库就是mysql。这部分一般在你学习Servlet/Jsp的时候,就会接触到的,其中的JDBC部分就是数据库相关的部分。你不仅要学会使用JDBC操作数据库,还要学会使用数据库客户端工具,比如navicat,sqlyog,二选一即可。开发...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
?!,腾讯微博黑名单里的人怎么不见了? 雨刮器喷不出水 有人扬言要杀我,我怎样通过法律保护自己 ...他说明天要杀我我不确定他会不会动手,我该怎么办? 做平面设计需要什么配置的笔记本好? 学平面设计的买笔记本用I3处理器还是I5处理器好 雨刷不喷水是什么原因? 斯柯达晶锐2011款雨刮器保险丝在哪里符号图片是什么_百度问一问 北京中农绿亨种子科技有限公司的介绍 晶锐1.6AT,突然雨刮器不能工作了,是什么情况? 牛筋炖萝卜的做法大全 好路由器与坏路由器的差别是什么? 牛筋炖白萝卜怎么做 急求!!!话剧或者舞台剧剧本!!!六个女生演的 有没有比较适合大学生演的话剧剧本 什么是保温灌? 油路块堵头漏油现象怎么解决? 马钢铸铁管件配件为什么不开裂 广州人对管件的俗称 连续一个红绿灯摄像头视频违法是不是就扣一次的分。 水暖五金的管道连接件 开车时拿着电话拍视频,被摄像头拍到会被罚款吗? 一手开车一手拍风景视频违章吗? 装了wifi扩展器之后原来的路由器的网连不上 水星拓展器为什么不能拓展家里的5G无线网络 海藻面膜适合什么肤质的人使用? facialmask Jantar mask 怎么用 how often do you use a faciak mask facial mask是什么意思 福清牛筋炖萝卜怎么做 spring data jpa 可以把查询结果放到 map 中吗 哪一方法学会,就能做出营养美味又好吃解馋的萝卜炖牛筋? 牛筋烧萝卜可以吗 白萝卜烧牛筋怎么做如何做好吃 萝卜炖牛筋的介绍 为什么感受到别人很喜欢我时自己就很不自在? 我发现我觉得或怀疑别人喜欢我,其实是我喜欢他们? 我这是什么病我喜欢别人我就觉得别人也喜欢我? win10使用蓝牙智能鼠标卡顿是怎么回事 dell戴尔 win10家庭版蓝牙连接鼠标和键盘后看视频鼠标键盘会反应迟钝是为什么 蓝牙鼠标为什么换个地方就变迟钝了? 64位硬件配64位win10,鼠标响应速度感觉还没有老电脑的xp灵敏? 蓝牙耳机过一会儿不用就没声音了? win10系统怎么安装ipx协议联网玩老游戏 win10系统ipx协议补丁有 关于少数民族语言文字政策的文件有哪些 党和国家语言文字政策的内容是什么 党和国家为什么要坚持民族语言文字平等政策?1500字以上 党和国家对民族语言文字的基本政策是? 民族政策有哪些