<div class="iteye-blog-content-contain" style="font-size: 14px"></div>
1.Hibernate 讲解内容:
1.Hibernate简介 |
2.Hibernate开发流程 |
3.Hibernate配置文件 |
4.Hibernate核心接口和类 |
5.HibernateORM映射 |
6.HQL |
7.Hibernate懒加载机制和抓取策略 |
8.Hibernate缓存 |
9.Hibernate锁机制 |
2.Hibernate是作用在持久层的ORM开源框架,底层是JDBC编写的(O是object对象,R是relation关系,M是mapping映射)。ORM是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单说ORM
是通过使用描述对象和数据之间映射的元数据(*.hbm.xml)将java程序中的对象自动持久化到数据库中。本质就是将数据从一种形式转换成另一种形式。
3.Hibernate是帮助我们利用面向对象的思想开发基于关系型数据库的应用程序。
4.Hibernate中若关系式一对一,外键设在次要的或者后产生的一方,若是一对多的关系外键设置多的一方。
5.类的关系式继承关系的,转成hibernate的表关系是一对一关系。
6.创建Hibernate项目所需jar包:
7.配置cfg.xml:
8.测试数据库链接:用junit插件测试的.
9.SessionFactory和Configuration
- SessionFactory是线程安全的,一个数据库对应一个SessionFactory,生命周期长,一般在整个系统生命周期内有效;SessionFactory保存着和数据库连接的相关信息(user,password,url)和映射信息,以及Hibernate运行时要用到的一些信息。
- SessionFactory是产生Session的工厂
- SessionFactory维护二级缓存
- 工厂初始化代码:
Configuration cfg = new Configuration();
cfg.configure(“config.cfg.xml”);
也可以通过cfg.setProperty设置属性。
SessionFactory sessionFactory = cfg.buildSessionFactory();
10.Session:
- Session是非线程安全的,生命周期较短,代表一个和数据库的连接,在B/S系统中一般不会超过一个请求;内部维护一级缓存和数据库连接,如果session长时间打开,会长时间占用内存和数据库连接。
- Session的几个主要方法:
1.save,保存对象
2.delete,删除对象
3.update,更新对象,如果数据库中没有记录,会出现异常。
4.get,根据ID查,会立刻访问数据库。
5.Load,根据ID查,(返回的是代理,不会立即访问数据库)。
11.po和映射文件:
- 开发流程
1由po-> mapping->db。(官方推荐)
2由DB开始,用工具生成mapping和po。(使用较多)
3由映射文件开始。
- po类
1.默认的构造方法(必须的)。
2.有无意义的标示符id(主键)(可选)
3.非final的,对懒加载有影响(可选)
public class User { private int id; private String name; private Date createTime; public User(){} //getter setter… }
*.hbm.xml
<hibernate-mapping package=“com.puckasoft.po">
<class name="User" table="user">
<id name="id">
<generator class="native"/>//native表示自增
</id>
<property name="name"/>
<property name=“createTime”
column=“create_time”/>
</class>
</hibernate-mapping>
12.创建好po类和映射文件---》导表(在数据库中创建表)
13.单表的数据保存例子:
若是不想让某个字段插入,可以在hbm.xml中配置中<property name="name" insert=“false” /> 字段的property 标签中 的insert属性值改为false,默认是false。
14.update 数据例子:
把 回去session对象的方法封装起来,把sessionfactory写成单利模式:
1)当更新数据在数据中不存在,就是更新失败是会报异常:
意思是:批量跟新返回不期望的行数,实际更新0行,期望是1行。
2)若更新的那条数据存在但是对象只给要改变的那个属性赋值了,更新的结果是其他没赋值的字段也会被跟新,它们会根据默认值跟新字段。
3)若某个字段不允许更新可以在对应的.hbm.xml文件中对应的property标签中加上update属性把值改为“false”,当更新数据时这个字段不会更新。
15.delete操作例子:
当删除的数据id在数据库中不存在,会跑一个异常和update时的异常一样的。
16.get方法和load方法的区别:
- load支持懒加载机制,而get方法不支持懒加载(load方法是在使用对象时发送的sql语句,get方法是在get方法是就发送sql语句),get方法是返回的po类,load方法返回的是cglib的代理类,增强po类的功能可以自己发送sql.
- get方法返回的是实体对象本身,而load方法返回是实体对象的cglib代理类
- 采用get加载数据如果没有匹配的数据返回null ,而load方法抛ObjectNotFoundException(get方法取不到数据时返回的对象就是null,当时load时代理类要继承po(po是null)类,所以回报异常。)
- load方法一般不单独使用(因为load方法查出的对象,return过后就不能使用了)
17.懒加载机制:
- 定义:只有在真正使用实体对象时,才发出Sql语句加载它。所谓真正使用实体对象时是指调用了对象的方法,其中不包括getId,getClass方法。
- 优点:避免无谓的性能开销
- 当使用load方法加载实体时,会看映射文件中配置该类的class标签上的lazy属性,lazy=true才实现懒加载
- 当使用getXXX方法加载关联对象时,会看映射文件中配置该关联对象的标签上的lazy属性,然后再决定是否实现懒加载
- Hibernate标签上的 lazy属性,在3.x后是默认打开的,在以前版本中默认是关闭的。
- 懒加载生命周期与session有关,lazy加载必须依赖于session一直开启,session关闭懒加载就失效,抛LazyInitializationException
- 懒加载是用cglib代理类实现的,它依赖cglib.jar。cglib代理类是实体类的子类,cglib代理类能发送sql语句
18.懒加载的配置:
- <class> 标签
取值:true/false
只对普通属性的延迟加载有效,不包括集合和其他类属性。
- <set><List>集合标签
取值: true/false/extra
如果设置为true,那么就会在该集合被加载时发出SQL语句
如果设置为false,那么在发出查询普通属性sql时就会随后发出集合的查询语句。
如果设置为extra,与设置为true类似,但相对智能,建议在实际工作中选用extra.
- <one-to-one><many-to-one> 单端关联标签
取值: proxy /false/noproxy
如果设置为proxy,那么就会在类对象被加载时发出SQL语句。
如果设置为false,那么在发出查询普通属性sql时就会随后发出类对象的查询语句。
19.po对象的三个状态:
1)瞬时态 transient状态的特征
* 在数据库中没有与之匹配的数据(没有唯一标识符)
* 没有纳入session的管理
2)持久态 persistent状态的特征
* persistent状态的对象在数据库中有与之匹配的数据(有唯一标识符)
* 纳入了session的管理
* 在清理缓存(脏数据检查)的时候,会和数据库同步
3)托管态 detached状态的特征
* 在数据库中有与之匹配的数据(有唯一标识符)
* 没有纳入session的管理
状态说明例子:
注意:这个例子中第一个try的里面的第一个红框的下面的的update语句是可以去掉的,因为持久态会清理缓存同步 数据,所以在commit的时候会发送update语句,下面的那个update语句是不可以去掉的因为po只有在持久态是才有那个特征。
po对象生命周期图:
20.动态更新(load方法的用处,load方法不能单独使用)
1)把将要修改表对象的.hbm.xml文件中class标签中添加一个dynamic-update=“true”的属性。
2)将需更新的对象load进来。
3)改变某个属性
4) commit。
相关推荐
### Hibernate入门知识点详解 #### Hibernate概述与ORM思想 - **定义**:Hibernate是一个开源的、轻量级的对象关系映射(Object-Relational Mapping,简称ORM)框架,它主要应用于JavaEE架构中的DAO(Data Access ...
"Hibernate入门到精通" Hibernate 是一个基于Java的ORM(Object-Relational Mapping,对象关系映射)框架,它提供了一种简洁高效的方式来访问和操作关系数据库。下面是 Hibernate 的主要知识点: Hibernate 简介 ...
### Hibernate入门知识点详解 #### 一、环境搭建与配置 - **工程创建**:首先,创建一个名为`HibernateDemo`的Java工程,这是构建Hibernate应用的基础。为了使工程能够识别和运行Hibernate相关的代码,需要正确地...
### MyEclipse 下 Hibernate 入门知识点解析 #### 一、概述 本文将详细介绍如何在 MyEclipse 环境下进行 Hibernate 的基础配置及应用。对于初学者来说,通过本教程可以快速掌握 Hibernate 在实际项目中的使用方法...
以上就是Hibernate的基础入门知识,包括其概念、核心组件以及简单的使用示例。随着对Hibernate的深入学习,你会发现它还支持更高级的功能,如级联操作、多对一、一对多等复杂关系映射、缓存机制、延迟加载等,这些都...
### Hibernate入门知识点详解 #### 一、概述 在IT领域,特别是软件开发中,数据库与对象之间的交互一直是项目中的核心部分。为了更好地处理这一过程,众多框架和技术应运而生,其中Hibernate作为一款优秀的对象...
**Hibernate入门** Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需编写大量的SQL语句,就能实现数据的增删改查。本教程将分为五个部分,逐步深入Hibernate的世界。 **...
### Hibernate入门知识点详解 #### 一、Hibernate简介与安装配置 **1.1 Hibernate概念** Hibernate是一种开源的对象关系映射(Object Relational Mapping, ORM)框架,用于简化Java应用程序与数据库之间的交互。...
### Hibernate 入门知识点详解 #### 一、准备开发环境 在进行 Hibernate 开发之前,首先需要准备必要的开发环境。 1. **安装 MySQL 5**: - 下载并安装 MySQL 5 数据库服务器。 - 配置 MySQL 的环境变量,确保 ...
### Hibernate 入门知识点概述 #### 一、Hibernate简介及所需类别库 - **Hibernate**是一种**对象关系映射(ORM)**框架,用于简化Java应用程序与关系型数据库之间的交互。它通过将Java对象映射到数据库表以及将...
### Hibernate入门知识点详解 #### 一、环境搭建与配置 **1.1 环境需求** - **开发工具:** Eclipse JEE Kepler 版本 - **应用服务器:** Apache Tomcat 7.0.57 - **Hibernate版本:** hibernate-release-4.3.7....
【hibernate入门--第一个实例】 Hibernate 是一个强大的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务。通过使用Hibernate,我们可以将数据库操作转换为对Java对象的操作,从而简化了数据库...
### hibernate入门知识点详解 #### 一、Hibernate简介与应用场景 **Hibernate** 是一款开源的对象关系映射(ORM)框架,它提供了强大的解决方案,用于处理Java应用中的数据持久化问题。对于初学者来说,理解...
### Hibernate入门教程知识点详解 #### 一、Hibernate框架简介 **Hibernate** 是一款开放源代码的**对象关系映射(Object-Relational Mapping,简称ORM)**框架,它为Java应用提供了一种高效的机制,用于处理Java...