Ibatis or Hibernate or Spring jdbcTemplate?

为什么使用ibatis而不用spring jdbcTemplate

 

1:ibatis仅仅是对jdbc薄薄的一层封装,完全不丧失sql的灵活性 

2:ibatis所有的sql都可以放在配置文件中,这样有利于sql的集中管理,特别是在sql tuning是很容易把得到所有的sql,如果使用spring jdbctemplate,那么难免要在sql adv上调试好了sql,然后在粘贴到java代码中,会有一大堆的StringObj+=和 StringBufferObj.append() ,如果sql 很长,那么总是copy , paste 也很烦,ibatis没有这样的问题。 

3:ibatis可以把查出的结果集自动mapping成po,不用写一行代码,只需配置一下ResultMap参数即可,而jdbcTemplate大多数情况都要手动的mapping或者实现MappingSqlQuery,ResultSetExtractor等,无论如何都要编程,这些都是体力活,如果使用了ibatis,这些体力活完全可以省去。 

4:ibatis内置cache机制,同时还可以和osCache集成,cache的也是可以配置的,如果配置得当可以大大提高程序性能。 

5:ibatis支持动态sql,不需要在java里有那么多if, else,完全可配置

 

 

 

为什么用ibatis不用Hibernate?

 

  我已经用了hibernate好多年了,现在也要转型,因为hibernate多变查询的表现实在太差还有一查就是一个表所有字段要么就是自己写构造函数 查询时候new 我感觉太失去灵活性了,无法接受,虽然我们现在还是用hibernate但是我决定转型了

1. iBatis 易于掌握。拿来文档看半天到两天就可以掌握了。

   Hibernate 可能需要 3 倍以上的时间来掌握。

 

2. iBatis 更容易进行 sql 的 优化。

 

   这个应该大家都有共识了。另外 Hibernate 生成的 sql 也实在是太难看了。鉴

   于有的朋友提到了 sql 不太重要。我想在这里强调一下我的经验,一般系统性能

   的瓶颈都在数据库上。所以这一点是 iBatis 非常重要的一个优势。

 

3. iBatis 可以进行细粒度的优化

 

   3.1 比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中

       的一个字段,iBatis 很简单,执行一个sql

       UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id#

       但是用 Hibernate 的话就比较麻烦了,缺省的情况下 hibernate 会更新所有字段。

       当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确

       定这个功能的负面效果。

 

   3.2 我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据

     库读很多数据,节省流量

       SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...

 

     3.2.1 一般情况下

     Hibernate 会把所有的字段都选出来。比如说有一个上面表有8个字段,

     其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为什么要把他

     们也选出来呢?

 

     3.2.2 用 hibernate 的话,你又不能把这两个不需要的字段设置为 lazy load,因

     为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出

     ibatis 的好处了

 

     3.2.3 Hibernate 还有一个方案,就是生成 javabean/map/object[](感谢

     leelun/cjmm),但是这样的话就可能会产生大量的多余 class。map/object[] 的方式

     应该不错,我比较喜欢这种方式。

 

   3.3 如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对

     象 select 出来,然后再做 update。这对数据库来说就是两条 sql。而 iBatis

     只需要一条 update 的 sql 就可以了。减少一次与数据库的交互,对于性能的

     提升是非常重要。

 

4. 开发方面

   4.1 开发效率上,我觉得两者应该差不多

   4.2 可维护性方面,我觉得 iBatis 更好一些。因为 iBatis 的 sql 都保存到

       单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保存

       sql/hql。

 

 

5. 运行效率

   5.1 在不考虑 cache 的情况下,iBatis 应该会比hibernate 快一些或者很多

      (根据实际情况会有所不同)。

 

当然 iBatis 也有比较大的缺点

1. 不同数据库类型的支持不好,如果你要开发的系统是要在对中数据间移植,那可能用 hibernate 比较好。

2. 缺省的 cache 支持不好,但是 hibernate 的 cache 支持其实也不是很好,而且很复杂。尤其是对于大并发量的应用。所以我更倾向于自己管理 cache。

【2021最新版】Dubbo面试题总结(40道题含答案解析) 文章目录1、为什么要用Dubbo?2、Dubbo的整体架构设计有哪些分层?3、默认使用的是什么通信框架,还有别的选择吗?4、服务调用是阻塞的吗?5、一般使用什么注册中心?还有别的选择吗?6、默认使用什么序列化框架,你知道的还有哪些?7、服务提供者能实现失效踢出是什么原理?8、服务上线怎么不影响旧版本?9、如何解决服务调用链过长的问题?10、说说核心的配置有哪些?11、Dubbo推荐用什么协议?12、同一个服务多个注册的情况下可以直连某一个服务吗?13、画一画服务注册与发现的流程图?14、Dubbo集群容错有 阅读详情

相关推荐

在 Windows 10 中通过 WSL2 安装 vLLM 部署本地大模型的方法和步骤

通过 WSL2 在 Windows 10 中部署 vLLM 的核心优势是兼顾 Windows 生态与 Linux 环境的 GPU 加速能力,适合需要在 Windows 下开发但依赖 vLLM 高性能推理的场景。相比原生 Windows 部署(Ollama 等工具),该方案性能更优(接近原生 Ubuntu),且支持更大模型和量化优化。若追求极致性能,建议直接使用 Ubuntu 系统;若必须依赖 Windows 工具链,WSL2 + vLLM 是当前最优选择。

当 AI 开始写文章、绘星空,甚至预测未来,您还在旁观吗?这里将剖开人工智能的思考逻辑,拆解 AI 创作的底层密码,也聊聊人工智能里的人文温度。每篇都有让你拍案的细节,快来解锁 AI 时代的神奇世界! 3753

ibatis vs jdbcTemplate

1.ibatis分页处理 public List query(String activityId, Date startTime, Date endTime, Integer start, Integer pageSize, String flagg) { UserExample example = new UserExample(); Criteria criteria = exam

coding change your life 675

Microapp 接入vite子应用

MicroApp接入vite版本,干货满满,手把手步骤说明,加上报错说明,赶紧上车!

outsider76557的博客 4658

为什么使用ibatis而不用spring jdbcTemplate

第一:ibatis仅仅是对jdbc薄薄的一层封装,完全不丧失sql的灵活性 第二:ibatis所有的sql都可以放在配置文件中,这样有利于sql的集中管理,特别是在sql tuning是很容易把得到所有的sql,如果使用spring jdbctemplate,那么难免要在sql adv上调试好了sql,然后在粘贴到java代码中,会有一大堆的StringObj+=和 StringBufferO...

Ivan Li 的大杂烩 307

电赛备赛笔记:用STM32驱动AD9959信号发生器模块,从接线到出波保姆级教程

本文详细介绍了如何使用STM32驱动AD9959信号发生器模块,从硬件接线到软件调试的全流程。AD9959作为高性能DDS芯片,适用于电子设计竞赛中的信号生成需求。文章包含硬件连接指南、寄存器配置解析、多通道控制技巧以及常见问题解决方案,帮助参赛者快速掌握AD9959的应用。

weixin_31858171的博客 366

setup time和hold time的计算

内容仅仅为了方便记忆,与原理无关

sddhyl的博客 7813

springjdbc myibatis 共用 整合

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33722405的博客 138

Autosar进阶专栏索引

Autosar进阶专栏索引

赞的博客 3538

Ibatis 与 Spring Jdbc开发工作的比较

我以前开发的项目都是采用Spring的jdbc作为数据库的持久层技术,现在有人提出来采用Ibatis,今天自信阅读了Ibatis的帮助文档,详细地进行了代码开发工作量的比较,发现两者对于开发工作量,并没有太大的区别。...

goodhouse的博客 165

[系统安全] 十七.Windows PE病毒概念、分类及感染方式详解

作者前文介绍了PE文件格式,熟悉各种PE编辑查看工具,针对目标EXE程序新增对话框等;这篇文章将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并通过案例进行介绍。这些基础性知识不仅和系统安全相关,同样与我们身边的APP、常用软件及操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了《软件安全》视频、安全网站和参考文献中的文章,并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

杨秀璋的专栏 1万+

一步步教你使用 NVIDIA 推出的全新GPU加速求解器 cuOpt:解锁超高效率的求解体验

未完成

Linshaodan520的博客 868

关于hibernate 、ibatis、jdbctemplate对Bbasedao的封装已经使用方式

/********************************************************/ /*************Hibernate封装BaseDao(原生态)*************/ /********************************************************/   概要说明: Hibernate封装BaseDa

天行健,君子以自强不息!~ 5721

YOLOv11模型改进:利用注意力机制实现小目标检测精度跃升

如果你在实操中遇到精度提升不明显或速度下降过多的问题,不妨尝试调整注意力模块的类型(如替换为CA)或插入层级,或针对性优化小目标的数据集增强策略。记住,小目标检测的核心是“特征强化与空间定位”,只要结合业务场景灵活调整注意力模块的组合,你也能让YOLOv11在小目标识别任务中脱颖而出。接下来,我们从模块选型到代码落地,一步步带你打造“小目标检测专精版”YOLOv11,真正帮你解决工业场景中(如安防、质检)的小目标识别痛点。在城市安防场景中,改进后的YOLOv11对远处行人、车辆(小目标)的识别准确率提升。

m0_71589036的博客 454

Spring 的JdbcTemplate的持久层封装

1,Spring 2.0提供了几种常用的持久层访问方式:   1,Jdbc,-----------JdbcTemplate; 2,hibernate ,-------hibernateTemplate; 3,JDO 4,Oracle TopLink; 5,iBATIS SQL Maps; 6,JPA;     2,jdbc封装的相关类:      JdbcDaoSuppor...

liguangyuanyinli的博客 375

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java jdbctemplate update_Java Spring-JdbcTemplate增删改查

2017-11-11 21:13:13Spring 框架中提供了对持久层技术支持的类 :JDBC : org.springframework.jdbc.core.support.JdbcDaoSupportHibernate 3.0 : org.springframework.orm.hibernate3.support.HibernateDaoSupportiBatis : org.spring...

weixin_42486083的博客 369

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring2.x——使用Spring访问数据

1、统一的数据访问异常层次体系 在一套语义完整的异常体系定义完成之后,不管数据访问方式如何变换,只要相应的数据访问方式能够将自身的异常,转译到这套语义完整的异常体系定义之内,对于客户端对象来说,自身的数据访问异常处理逻辑从此就是岿然不动的。 Spring框架中统一的异常体系所涉及的大部分异常类型都定义在org.springframework.dao包中,处于这个体系的所有异常类型均为以org.springframework.dao.DataAccessException为“统领”,然后根据职能划分为不同

SUN19980421的博客 276

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

中庸:没有最佳,只有最适! IBATIS,你合适的存活空间!

      前言:在我以前的这两篇博文:IBATIS2序:T[.WOLF]开场白和IBATIS2知识点二:放出IBATIS2.3.4.8--守护IBATIS2中,我阐述了为何开IBATIS2这个栏目,以及为何需要歇息一会儿守护着IBATIS2,并且打算进一步将有关IBATIS2 GUIDE的知识点逐步粘贴出来,为守护者提供全面的IBATIS2资源之泉。但时隔这段时间,觉得很有必要先简单的阐述下IB...

zhangfenglin的专栏 204

Spring的持久层封装

传统JDBC技术 下面的代码只是一个使用JDBC连接的示例,实际应用中不会这样用,一是代码繁琐,一是效率低。而Spring在持久层提供了更好的支持,对JDBC进行了良好的封装。 public class HelloWorld { Connection conn = null; Statement stml = null; { try { //获取数据连接 Class.f...

肥羊汤 294

Hitis [Hibernate-ibatis]

Hitis (1)在ibatis中, 不能取得实际执行的sql,也不能取得实际执行的sql所需要的参数数组,而Hitis可以(2)在ibaits中, 不能在逻辑节点写入像"大于号"这样的特殊字符,因为,它是基于xml的,而Hitis可以,Hitis很像html,可以在逻辑节点直接写“特殊字符”(3)在ibatis中, 也须90%的情况下,你用的是其强大的“动态组装sql”,而Hiti...

iteye_12758的博客 169

spring 同时配置hibernate and jdbc 事务

来源http://blog.youkuaiyun.com/caolaosanahnu/article/details/7514555 在项目中同时用到了JDBC和hibernate,分别配置了各自的事务,同时配置了不同的tx:annotation-driven。 但是在实际使用中,只有配置在前的tx:annotation-driven起了作用,另外一个tx:annotation-driven不

shanshan_blog的博客 992

Spring框架讲解-应用开发支持

一,事务支持提供了多种事务支持的方案,其中通过AOP进行事务支持可以避免侵害已有程序代码。例子:对某个业务方法进行事务保护,业务方法如下:public class MyBusinessObject{       public void myBusinessMethod() throws MyCheckedException{       ……       }}  为了使用AOP对该方法进行

dominolu的专栏 963

spring25--spring的JDBC模板、默认连接池、DBCP连接池、c3p0连接池

spring对持久层技术的支持: JDBC: org.springframework.jdbc.core.JdbcTemplate Hibernate3.0 : org.springframework.orm.hibernate3.HibernateTemplate IBatis(MyBatis) : org.springframework.orm.ibatis.SqlM...

月落孤城的博客 316

Hitis V1.0 [Hibernate-ibatis]

Hitis V1.0 (1)在ibatis中,不能取得实际执行的sql,也不能取得实际执行的sql所需要的参数数组,而Hitis可以 (2)在ibaits中,不能在逻辑节点写入像"大于号"这样的特殊字符,因为,它是基于xml的,而Hitis可以,Hitis很像html,可以在逻辑节点直接写“特殊字符” (3)在ibatis中,也须90%的情况下,你用的是其强大的“动态组装sql”,而Hi

冰冻火山 839

在Spring中使用纯SimpleJdbcTemplate之后的愿望

<br /> <br />最近在做项目的时候,越来越觉得使用Hibernate有多么的不爽了,在多表关联的情况,比如前台传递一个对象的id到后台,如果使用Hibernate的话还要通过这个id获取对应的对象,然后再对这个对象与之关联的表进行操作。你可能会说可以直接在HQL中使用 A.id 啊,但是如果观察Hibernate生成的SQL语句的话,他还是像数据库多查询了一下。 <br /><br />想用iBatis,但是看到它也不是传说中的那么方便,后来一直不断的在坛子里面有人提到直接使用JdbcTempla

xp9802的专栏 803
上一篇: 从 iBatis 到 MyBatis
下一篇: MyIbatis操作oracle数据库,插入空值的处理
六月澎湃
博客等级 码龄18年 2粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值