的情况下 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 快一些或者很多.