iBATIS和Hibernate不一樣,iBATIS是一個半自動化的O/R Mapping框架組件,所有的數據庫操作都需要手動編寫SQL語句。相應的,它們的內存消耗也是不一樣的。
比如更新用戶的操作,在Hibernate和iBATIS中寫法不同,如下所示:
Hibernate方式:
public void updateUser(DemoUser userPojo) {
DemoUser userPo = findUserByPK(userPojo.getId());
DataUtils.copySimpleObject(userPojo, userPo, false);
super.update(userPo);
}
iBATIS方式:
public void updateUser(DemoUser userPojo) {
super.getSqlMapClientTemplate().update("updateUser", userPojo);
}
在Hibernate中,存在實體的概念,調用get/load方法後,實體變爲受管狀態,任何對此對象的變更都將自動反饋到數據庫中。對於樣本中的代碼來說,存在userPojo和userPo兩個對象,相當於造成了兩倍的內存消耗。
在iBATIS中,可以直接通過框架調用相關SQL語句,由iBATIS執行。對於樣本中的代碼來說,只存在userPojo一個對象,沒有額外的內存消耗。