hibernate工作原理:
1。 读取并解析配置文件
2。 读取并解析映射信息,创建sessionFactory
3. 打开session
4. 创建事务Transaction
5。 持久化
6. 提交事务
7. 关闭session
8. 关闭SessionFactory
============
1. hibernate延迟加载机制
就是配置中的lazy吧,延迟加载就是当真正需要数据的时候,才执行数据的加载操作,有如下延迟加载机制:
实体对象的延迟加载;
集合的延迟加载;
属性的延迟加载;
2. hibernate二级缓存机制
hibernate提供2种缓存机制来提升程序性能,分别为一级缓存和二级缓存,也称内置缓存和外置缓存,该缓存位于数据库和应用程序之间。一级缓存对应于session级别,二级缓存是sessionfactory级别的全局缓存
============
hibernate查询数据的方式,项目中使用到的有HQL, QBC,和本地SQL
HQL:支持分页查询,运行使用having和group by,支持聚集函数如 sum(), min(), max(),能调用用户自定义SQAL,支持动态绑定参数。
Query query = session.createQuery("from customer as c where c.name = :customerName" + "and c.age = :customerAge"); query.setString("customerName" , "tom"); query.setInteger("customerAge" , "21"); list result = query.list();
QBC:主要是 Criteria接口, Criterion接口, Expression类
Criteria criteria = session.createCriteria(customer.class); Criterion criterion1 = Expression.like("name","t%"); Criterion criterion2 = Expression.eq("age",new Integer(21)); Critera = criteria.add(criterion1) ; Critera = criteria.add(criterion2) ; list result = criteria.list();
=========
load() 和 get() 区别:
User user = (User) session.load(User.class, userId);
User user = (User) session.get(User.class, userId);
区别1, load支持延迟加载,get 不支持。 当调用load方法的时候,并不会真正去查询数据库,只有用到user时才会去执行数据库查询。
注意:
User user = (User) session.load(User.class, userId);
System.out.println(user.getId());
对于这两行代码,不会执行数据库操作,因为load后会在hibernate一级缓存里面存放一个map对象,map的key就是userId的值,当你getId()时,它会在一级缓存中拿map的key值,而不去执行数据库查询。
区别2, 如果数据库中没有userId的对象,那么通过get方法加载,返回的是null,通过load加载,返回一个代理对象,如果后面调用user对象的某个属性(比如 user.getPassword())会抛出异常:org.hibernate.ObjectNotFoundException.
--Update
get 方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load 方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库。
hibernate对于load 方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get 方法,hibernate一定要获取到真实的数据,否则返回null。
============
如何优化 hibernate?
表字段要少,表关联不要怕多,有二级缓存撑腰。
使用双向一对多关联,不适用单向一对多???
尽可能的配置对象缓存,不适用集合缓存 ***
一对多使用Bag,多对多使用Set
……
hibernate自身管理一级缓存,如果需要使用二级缓存,则需要自己实现响应的代码,最为通用的memcached (MemcachedCacheProvider需要实现hibernate提供的CacheProvider接口)
相关推荐
【Hibernate 基础】是Java开发中一个重要的部分,主要关注如何将对象模型与关系数据库进行映射,以简化数据库操作。本PPT由传智播客制作,旨在帮助学习者掌握Hibernate的基础知识和应用。 首先,我们需要理解基于B/...
hibernate基础jar包。包含junit,antlr,don4j,hibernate-commons-annotations,hibernate-core,hibernate-jpa-api,javassit,jboss-logging,jboss-transaction-api
在本"Hibernate基础包"中,包含了用于SSH开发所需的全部核心库,使得开发者能够快速搭建项目并进行数据库交互。 首先,Hibernate的核心功能在于它的ORM(对象关系映射)机制。ORM允许开发者通过Java对象来操作...
本篇文章将深入探讨`Hibernate基础jar包`的构成,以及它们在Java Hibernate框架中的作用。 首先,Hibernate的核心jar包是实现ORM功能的基础。这些jar包包括但不限于以下: 1. **hibernate-core.jar**:这是...
本资源“Hibernate基础学习源码”提供了五个不同阶段的学习示例,分别命名为Hibernate_01至Hibernate_04以及Hibernate_M2M,涵盖了Hibernate的基本概念、配置、实体映射、CRUD操作以及多对多关系的处理。 1. **...
### Hibernate基础知识点详解 #### 一、什么是对象关系映射(ORM)以及为什么使用ORM? 在企业级应用开发中,持久层(persistence layer)占据了非常重要的地位。它主要负责处理与数据库之间的交互,包括数据的...
在本项目中,"springboot+hibernate基础项目"是一个使用Spring Boot和Hibernate框架构建的典型Java Web应用。Spring Boot简化了Spring的配置过程,而Hibernate则是一个强大的ORM(对象关系映射)工具,使得数据库...
**Hibernate基础知识** 1. **什么是Hibernate**:Hibernate是一个开源的Java ORM框架,它简化了Java应用与关系数据库之间的交互。通过提供一套API,Hibernate可以将Java对象自动持久化到关系数据库中,反之亦然,...
**Hibernate基础全攻略** Hibernate,一个强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以专注于业务逻辑而不是繁琐的SQL代码。本篇攻略将深入探讨Hibernate的基础知识,帮助初学者...
**Hibernate 框架概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者用面向对象的方式来处理数据库操作。ORM 解决了在 Java 应用程序中使用传统 JDBC 进行数据库操作时遇到的繁琐代码问题,将...
### Hibernate基础知识点详解 #### 一、Hibernate简介与优势 **Hibernate** 是一款开源的对象关系映射(ORM)框架,它允许开发者以面向对象的方式来处理数据库操作,从而简化了Java应用与关系型数据库之间的交互。...
这个“Hibernate基础架包”包含了进行Hibernate开发所需的基本库文件,使得开发者可以快速地将其集成到自己的项目中,无需手动配置大量的依赖。 在Hibernate中,核心概念包括: 1. **实体(Entities)**:实体代表...
**Hibernate基础教程** Hibernate是一个强大的Java对象关系映射(ORM)框架,它简化了数据库与Java应用程序之间的数据交互。这个基础教程将引导我们逐步了解Hibernate的核心概念和使用方法。 **一、Hibernate概述*...
《Hibernate基础教程》是针对Java开发人员的一本经典教材,主要涵盖了如何使用Hibernate这一流行的ORM(对象关系映射)框架来简化数据库操作。配套代码包"Bh3 2nd Ed Source Code"则提供了实例代码,帮助读者更好地...