`

hibernate之数据加载---Session.get/load

阅读更多

Session.get/load() 都是根据指定的实体类和id从数据库中读取记录,并返回与之对应的实体对象;

其区别:

  • 如果在数据库里未发现所要查询的值,get()返回Null,而load()抛出ObjectNullFoundException异常;
  • Load()方法可以返回实体的代理类实例,而get()永远直接返回实体类;
  • Load()可以利用内部缓存和二级缓存的数据,而get()只在内部缓存中查找,如果没有则发出SQL去执行查询;

 

看一个最简单的数据加载:

TUser user = (TUser) session.load(TUser.class, new Integer(1));

 session加载实体对象时,将经过哪些过程?

  1. 处于性能的考虑,Session在调用数据库查询功能之前,会先在缓存中查询,首先会根据实体类和id在内部缓存中查找;如果有值则返回它;
  2. 然后,Session会在当前"NonExists"记录中进行查找,如果“NonExists”记录中在同样的查询条件,则返回null;("NonExists"记录了当前session实例在之前所查询操作中,未能查到有效的数据查询条件[相当于一个黑名单查询列表],如此以来,如果session中一个无效的查询条件重复出现,即可迅速作出判断,获得更高性能);
  3. 对于Load()而言,如果内部缓存没有想要的值,那么继续在二级缓存中查询,如果有,则返回它;
  4. 如果在缓存中没能发现值,则发出SQL去执行查询操作,经过查询未发现对应记录,则将此次查询的信息记录到"NonExists";并返回null;
  5. 根据映射配置和SQL得到的ResultSet,创建对应的数据对象;
  6. 将其数据对象纳入当前Session实体管理容器(内部缓存)中;
  7. 执行Interceptor.onLoad方法(如果有对应的Interceptor);
  8. 将数据对象纳入二级缓存;
  9. 如果数据对象实现了lifeCycle接口,则调用数据对象的onLoad方法;
  10. 返回数据对象;

 

分享到:
评论

相关推荐

    hibernate-release-5.0.7.Final.zip官方

    - **提前加载关联对象**:通过 Session 的 load 或 get 方法提前加载关联对象,避免懒加载时触发额外查询。 ```java User user = session.get(User.class, 1L); List<Order> orders = session.createQuery(...

    hibernate-release-5.0.6.Final.zip(最新Hibernate架包)

    例如,使用`save()`或`saveOrUpdate()`方法保存对象,`delete()`删除对象,`get()`或`load()`查询对象,`Query`或`Criteria`接口进行复杂的查询。 8. **缓存机制**:Hibernate支持二级缓存,它可以提高数据读取效率...

    hibernate-release-5.4.18.Final.zip

    3. 数据库操作:通过SessionFactory获取Session,然后调用Session的save()、update()、delete()、get()、load()等方法进行CRUD操作。 4. 查询语句:利用Query或Criteria API编写HQL(Hibernate Query Language)或...

    hibernate-release-5.2.11.Final.zip

    4. **持久化操作**:Hibernate提供了一系列API来进行CRUD(创建、读取、更新、删除)操作,如`Session`接口中的`save()`, `update()`, `delete()`, `load()`和`get()`方法。 5. **HQL(Hibernate Query Language)*...

    hibernate-release-4.2.2.Final.zip

    Hibernate提供了一套完整的生命周期管理机制,包括持久化(persist)、加载(load)、检索(get)、更新(update)、删除(delete)等操作。同时,它支持延迟加载(Lazy Loading),避免了内存消耗和性能瓶颈。 五...

    spring_MVC源码

    15. <load-on-startup>1</load-on-startup> 16. </servlet> 17. <servlet-mapping> 18. <servlet-name>spring</servlet-name> <!-- 这里在配成spring,下边也要写一个名为spring-servlet.xml的文件,主要用来...

    Spring-MVC-Hibernate-CRUD-源码.rar

    Hibernate的Session.load()或Session.get()方法用于根据ID加载实体。 - **更新(Update)**:PUT请求用于更新已有数据。在Spring MVC中,更新逻辑通常在方法中实现,更新后的实体通过Session.update()或Session....

    hibernate-3.3.2.GA-jar包集合

    - `get()`: 通过查询条件加载对象。 7. ** Criteria 查询**: - Hibernate提供了一种强大且灵活的Criteria API,允许开发者基于对象的查询,无需写SQL。 8. **HQL(Hibernate Query Language)**: - Hibernate...

    Hibernate-3.2-API-EN.chm中,英文都有

    4. **检索(Load/Get)**:`Session.load()`基于主键直接加载对象,而`Session.get()`则提供了一种查询方式,如果没有找到匹配的对象,返回`null`。 **五、查询语言(HQL)** Hibernate Query Language (HQL) 是一...

    hibernate-release-4.1.8.Final.tgz

    4. CRUD 操作:通过 Session 对象实现增删改查操作,如 Session.save()、Session.delete()、Session.load() 和 Session.get()。 5. 查询:利用 HQL 或 Criteria API 实现动态查询,支持分页、排序、聚合等高级功能。...

    hibernate-release-5.0.12.Final.rar

    如Session的`save()`, `update()`, `delete()`方法用于对象的持久化,`get()`和`load()`用于查询,`Query`和`Criteria`接口则支持更复杂的查询需求。 6. **事务管理** Hibernate支持JTA和JDBC两种事务管理方式。在...

    hibernate-release-4.3.8.Final

    在4.3.8.Final中,Session的实现更加强大,提供了诸如save()、update()、delete()等方法进行数据的增删改,以及get()、load()等方法进行查询。同时,Criteria API和HQL(Hibernate Query Language)的使用让查询更加...

    hibernate-release-4.1.9.Final.zip

    4. 加载(Load/Get):根据主键获取对象,Load是延迟加载,Get是立即加载。 5. 查询(Query/Criteria):通过HQL或Criteria API执行数据库查询。 五、高级特性 1. 联合主键:允许使用多个字段作为主键。 2. 懒加载...

    Hibernate之数据加载方式

    1. **单个对象加载(Single Entity Loading)**:通过`Session.get()`或`Session.load()`方法加载单个对象,前者会立即从数据库中取数据,后者创建代理对象,数据在第一次访问时加载。 2. **集合加载(Collection ...

    hibernate的核心接口--Session

    - **定义**: Session 是 Hibernate 框架中最常用的接口之一,它又被称为持久化管理器。Session 负责所有与数据库交互的工作,包括管理持久化对象的生命周期,并通过提供第一级别的高级缓存来确保持久化对象的数据与...

    hibernate-release-5.2.6.Final.zip

    4. 查询:通过Session的get()、load()、query()或createCriteria()方法获取对象或执行复杂查询。 六、缓存机制 Hibernate支持一级缓存(Session级)和二级缓存(SessionFactory级)。一级缓存是默认开启的,存放...

    hibernate-release-4.1.5.SP1.zip

    6. CRUD操作:使用Session的save(), update(), delete(), load()或get()等方法完成对象的持久化操作。 7. 查询:使用HQL或Criteria API进行对象查询。 8. 提交事务:所有操作完成后,提交事务,确保数据一致性。 五...

    hibernate-3.2.rar

    `Session`提供了`save()`, `update()`, `delete()`, `load()`, `get()`等方法,用于持久化对象。 5. **事务管理**:`Transaction`接口负责处理数据库事务,如`begin()`, `commit()`, `rollback()`等。在Hibernate ...

    Hibernate应用例子one-to-one

    2. **加载**:要加载具有一对一关系的实体,可以使用`get`或`load`方法。例如: ```java Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); Person person = ...

    hibernate--3.Hibernate数据持久化(通过 Session 操纵对象)

    Session是Hibernate的核心接口之一,它负责对象的持久化操作,比如保存、更新、删除和检索对象。Session对象就像一个临时的工作区域,用于在应用程序和数据库之间传递信息。当我们在Session上进行操作时,这些操作...

Global site tag (gtag.js) - Google Analytics