load,get;find,iterator;merge,saveOrUpdate,lock的区别

一、load,get
(1)当记录不存在时候,get方法返回null,load方法产生异常

(2)load方法可以返回实体的代理类,get方法则返回真是的实体类

(3)load方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据,而get方法仅仅在内部缓存中进行数据查找,如果没有发现数据則将越过二级缓存,直接调用SQL查询数据库。
   (4) 也许别人把数据库中的数据修改了,load如何在缓存中找到了数据,则不会再访问数据库,而get则会返回最新数据。

二、find,iterator
     (1) iterator首先会获取符合条件的记录的id,再跟据id在本地缓存中查找数据,查找不到的再在数据库中查找,结果再存在缓存中。N+1条SQL。
(2)find跟据生成的sql语句,直接访问数据库,查到的数据存在缓存中,一条sql。

三、Hibernate生成的DAO类中函数功能说明(merge,saveOrUpdate,lock)


/**
      * 将传入的detached状态的对象的属性复制到持久化对象中,并返回该持久化对象。
      * 如果该session中没有关联的持久化对象,加载一个。
      * 如果传入对象未保存,保存一个副本并作为持久对象返回,传入对象依然保持detached状态。
      */
public Sysuser merge(Sysuser detachedInstance) {
      log.debug("merging Sysuser instance");
      try {
       Sysuser result = (Sysuser) getHibernateTemplate().merge(
         detachedInstance);
       log.debug("merge successful");
       return result;
      } catch (RuntimeException re) {
       log.error("merge failed", re);
       throw re;
      }
}

/**
      * 将传入的对象持久化并保存。 如果对象未保存(Transient状态),调用save方法保存。
      * 如果对象已保存(Detached状态),调用update方法将对象与Session重新关联。
      */
public void attachDirty(Sysuser instance) {
      log.debug("attaching dirty Sysuser instance");
      try {
       getHibernateTemplate().saveOrUpdate(instance);
       log.debug("attach successful");
      } catch (RuntimeException re) {
       log.error("attach failed", re);
       throw re;
      }
}

/**
      * 将传入的对象状态设置为Transient状态
      */
public void attachClean(Sysuser instance) {
      log.debug("attaching clean Sysuser instance");
      try {
       getHibernateTemplate().lock(instance, LockMode.NONE);
       log.debug("attach successful");
      } catch (RuntimeException re) {
       log.error("attach failed", re);
       throw re;
      }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于您的问题,我可以为您提供一些关于 C++ STL 中的 `find` 函数的信息。 在 C++ 中,`find` 函数是一种用于查找特定元素的迭代器算法。它在容器中按顺序搜索元素,并返回指向找到的第一个匹配元素的迭代器。如果未找到匹配的元素,则返回的迭代器将指向容器的末尾。 `find` 函数在 `<algorithm>` 头文件中定义,并可用于多种容器类型,例如 `vector`、`list`、`set` 和 `map`。 下面是 `find` 函数的一般语法: ```cpp iterator find (iterator first, iterator last, const T& val); ``` 其中,`first` 和 `last` 是指定搜索范围的迭代器,`val` 是要查找的特定值。`find` 函数将返回一个迭代器,指向第一个匹配元素。如果未找到匹配元素,则返回的迭代器等于 `last`。 以下是一个示例用法: ```cpp #include <iostream> #include <algorithm> #include <vector> int main() { std::vector<int> numbers = { 1, 2, 3, 4, 5 }; auto it = std::find(numbers.begin(), numbers.end(), 3); if (it != numbers.end()) { std::cout << "Element found at index: " << std::distance(numbers.begin(), it) << std::endl; } else { std::cout << "Element not found!" << std::endl; } return 0; } ``` 在上面的示例中,我们使用 `find` 函数在 `numbers` 容器中查找值为 3 的元素。如果找到了匹配的元素,我们输出它的索引。否则,我们输出 "Element not found!"。 希望以上信息对您有所帮助!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值