Hibernate4框架:
1. 作用:能让开发人员以面向对象的方式操作数据库,从而简化持久层的开发。
2. ORM框架:Object Relation Mapping : O/R Mapping 对象关系映射。
Object: 面向对象的编程语言.
Relation: 关系型数据库。
ORM框架主要负责面向对象的编程语言与关系型数据库之间转换。
ORM框架:只是一种思想,不是一个具体的框架。
ORM框架有哪些:Hibernate、TopLink、JDO等。
ORM框架的设计思想:
面向对象的编程语言(Java) 关系型数据库
类 表
对象 一行数据
属性(Field) 一列
3. JPA: Java Persistence Api : Java持久化api。
a. JPA是Sun根据ORM框架的思想,制订了持久化层的规范。
JDBC: 是Sun为数据库厂商制定的数据库连接的规范。Java DataBase Connection.
Hibernate框架它对JPA做了实现。
注意:编程时尽量面向JPA编程,到时底层ORM框架就可以随意切换。
4. hibernate与jpa:
hibernate出现的时间比较早,所以学习时,既要学习hibernate又要学习jpa.
一、Hibernate的下载与安装:
a. 到官方网站:http://www.hibernate.org 下载hibernate的压缩包。
hibernate-release-4.3.1.Final.zip
b. 文件目录说明:
-- documentation : 存放hibernate所有文档。
devguide : 开发指导。
javadocs : hibernate的api文档。
manual : 开发指南。
quickstart : 快速开始。
-- lib : (依赖的第三方jar包,自已的jar包)
required : 必须的。
jpa : 必须的。
optional : (可选的) c3p0连接池(必须的)、proxool连接池、ehcache缓存框架。
-- project : 源码、示例、测试用例。 etc文件夹下面存放了hibernate的配置文件模版。
二、Hibernate的简单使用:
第一步:拷贝jar (required、jpa、c3p0、mysql驱动).
第二步:写一个hibernate.cfg.xml(全局的配置文件).
第三步:开发
a. 开发持久化类。
持久化类 = pojo + annotation注解(@Entity).
持久化类 = pojo + Xxx.hbm.xml配置文件.
pojo : Plain Old Java Object 最简单、最传统的java Bean.
写pojo有下面四个要求:
-- 要提供一个无参构造器
-- 所有的属性都要有setter与getter方法。
-- 属性不能用final修饰。
-- 必须提供一个唯一的标识符属性。(@Id)
b. hibernate编程。
Configuration : 加载hibernate.cfg.xml配置文件,创建SessionFactory.
SessionFactory : 专门创建Session
Session : 持久化操作。
Transaction : 事务。
Session 会话(持续的有效时间)
Servlet(HttpSession) : 浏览器打开到关闭。
MyBatis (SqlSession) : 数据库连接的获取到数据库连接的关闭。
Hibernate (Session) : 数据库连接的获取到数据库连接的关闭。
三、配置文件:
1. ehcache.xml : 缓存的配置文件。
2. hibernate.cfg.xml : 核心的全局的配置文件
数据库方言、是否显示sql语句、是否格式化sql语句、是否支持自动建表、
数据库连接的信息、c3p0信息。
<property name=""></property>
持久化实体的配置:
<mapping class="持久化实体类"/>
<mapping resource="org/fkjava/domain/User.hbm.xml"/>
3. hibernate.properties : 属性文件。
添加持久化实体需要调用:
Configuration.addAnnotatedClass(User.class)
4. Xxx.hbm.xml : 配置pojo 与 表之间的映射关系。(被pojo 加 annotation注解取代).
四、Hibernate的体系结构:
基础的api说明:
1. Configuration : 加载hibernate.properties|hibernate.cfg.xml文件,产生一个SessionFactory。
2. SessionFactory : 它是当前数据库在内存中镜像,因为它封装了数据源,实体与表之间映射关系.
整个应用只需一个SessionFactory,一个SessionFactory对应的是一个数据库,所在以在应用启动创建
SessionFactory, 在应用关闭时,关闭SessionFactory。
a. 它是线程安全的,允许多线程并发访问。
b. 它是创建Session的工厂。
c. 可选的二级缓存。(默认的话是关闭)
3. Session : 是应用程序与持久层交互的单线程对象。它存活的时间比较短。
a. 它底层封装了数据库连接(Connection), 用完就要关闭.
b. 它是创建Transaction的工厂。
c. 必须开启的一级缓存。
d. 它是线程不安全的。(ThreadLocal)
4. Transaction : hibernate的事务,它底层封装了jdbc事务(局部事务),jta(分布式事务)
WebShere(IBM)、WebLogic(Oracle)、Jboss.
五、Hiberante的CRUD操作:
Session管理下持久化实体的状态。
a. transient : 瞬态。User u = new User();
b. persistent : 持久化。在Session的一级缓存中。在持久化状态下,对该实体所做修改,
会同步到底层的数据库。当调用session.flush()或者是transaction.commit().
session.contains(u) : 返回true, u就持久化状态。
c. detached : 脱管。脱离了Session管理,不在Session的一级缓存中,曾经被Session管理过。
User u = new User(); // 瞬态
u.setId(3); // 脱管
1. 添加( 瞬态 --> 持久化状态):
a. Serializable id = session.save(u); 立即发送insert语句,保存数据。(但是主键id要自增长).
u : 持久化状态
b. session.saveOrUpdate(u) : 添加或者修改. (先根据主键id查询做判断,是添加还是修改)。
u : 持久化状态
c. session.persist(u) : 延迟发送insert语句,保存数据。(跟事务是否开启有关系)
u : 持久化状态
d. User user = (User)session.merge(u) : 集成了添加与修改
// u : 瞬态 user : 持久化状态
2. 修改:
a. 在脱管状态下( 脱管---> 持久化状态):
session.update(u);
session.saveOrUpdate(u);
User user = (User)session.merge(u);
b. 在持久化状态下
根据主键id获取一个已持久化的对象,直接调用setter方法即可。
User user = get(User.class, 5);
user.setXxxxx();
3. 删除:
a. 在脱管状态下( 脱管---> 持久化状态):
User user = new User();
user.setId(5);
session.delete(user);
b. 在持久化状态下
User user = get(User.class, 5);
session.delete(user);
4. 根据主键查询:
session.get(User.class, 1) : 立即发送sql语句加载数据。
session.load(User.class, 1) : 延迟加载数据,它开始返回一个代理对象,
当你要真正用的时候才分发送sql语句。(当有真正用它时有可能会出现异常)
5. session.evict(entity) : 从session一级缓存中踢出entity.
session.clear() : 清空session一级缓存中所有实体。
注意:只加@Entity的话,持久化实体生所表名是它的类名列名就是实体属性名。
dtd位置:
hibernate-release-4.3.1.Final\project\hibernate-core\src\main\resources\org\hibernate
1. 作用:能让开发人员以面向对象的方式操作数据库,从而简化持久层的开发。
2. ORM框架:Object Relation Mapping : O/R Mapping 对象关系映射。
Object: 面向对象的编程语言.
Relation: 关系型数据库。
ORM框架主要负责面向对象的编程语言与关系型数据库之间转换。
ORM框架:只是一种思想,不是一个具体的框架。
ORM框架有哪些:Hibernate、TopLink、JDO等。
ORM框架的设计思想:
面向对象的编程语言(Java) 关系型数据库
类 表
对象 一行数据
属性(Field) 一列
3. JPA: Java Persistence Api : Java持久化api。
a. JPA是Sun根据ORM框架的思想,制订了持久化层的规范。
JDBC: 是Sun为数据库厂商制定的数据库连接的规范。Java DataBase Connection.
Hibernate框架它对JPA做了实现。
注意:编程时尽量面向JPA编程,到时底层ORM框架就可以随意切换。
4. hibernate与jpa:
hibernate出现的时间比较早,所以学习时,既要学习hibernate又要学习jpa.
一、Hibernate的下载与安装:
a. 到官方网站:http://www.hibernate.org 下载hibernate的压缩包。
hibernate-release-4.3.1.Final.zip
b. 文件目录说明:
-- documentation : 存放hibernate所有文档。
devguide : 开发指导。
javadocs : hibernate的api文档。
manual : 开发指南。
quickstart : 快速开始。
-- lib : (依赖的第三方jar包,自已的jar包)
required : 必须的。
jpa : 必须的。
optional : (可选的) c3p0连接池(必须的)、proxool连接池、ehcache缓存框架。
-- project : 源码、示例、测试用例。 etc文件夹下面存放了hibernate的配置文件模版。
二、Hibernate的简单使用:
第一步:拷贝jar (required、jpa、c3p0、mysql驱动).
第二步:写一个hibernate.cfg.xml(全局的配置文件).
第三步:开发
a. 开发持久化类。
持久化类 = pojo + annotation注解(@Entity).
持久化类 = pojo + Xxx.hbm.xml配置文件.
pojo : Plain Old Java Object 最简单、最传统的java Bean.
写pojo有下面四个要求:
-- 要提供一个无参构造器
-- 所有的属性都要有setter与getter方法。
-- 属性不能用final修饰。
-- 必须提供一个唯一的标识符属性。(@Id)
b. hibernate编程。
Configuration : 加载hibernate.cfg.xml配置文件,创建SessionFactory.
SessionFactory : 专门创建Session
Session : 持久化操作。
Transaction : 事务。
Session 会话(持续的有效时间)
Servlet(HttpSession) : 浏览器打开到关闭。
MyBatis (SqlSession) : 数据库连接的获取到数据库连接的关闭。
Hibernate (Session) : 数据库连接的获取到数据库连接的关闭。
三、配置文件:
1. ehcache.xml : 缓存的配置文件。
2. hibernate.cfg.xml : 核心的全局的配置文件
数据库方言、是否显示sql语句、是否格式化sql语句、是否支持自动建表、
数据库连接的信息、c3p0信息。
<property name=""></property>
持久化实体的配置:
<mapping class="持久化实体类"/>
<mapping resource="org/fkjava/domain/User.hbm.xml"/>
3. hibernate.properties : 属性文件。
添加持久化实体需要调用:
Configuration.addAnnotatedClass(User.class)
4. Xxx.hbm.xml : 配置pojo 与 表之间的映射关系。(被pojo 加 annotation注解取代).
四、Hibernate的体系结构:
基础的api说明:
1. Configuration : 加载hibernate.properties|hibernate.cfg.xml文件,产生一个SessionFactory。
2. SessionFactory : 它是当前数据库在内存中镜像,因为它封装了数据源,实体与表之间映射关系.
整个应用只需一个SessionFactory,一个SessionFactory对应的是一个数据库,所在以在应用启动创建
SessionFactory, 在应用关闭时,关闭SessionFactory。
a. 它是线程安全的,允许多线程并发访问。
b. 它是创建Session的工厂。
c. 可选的二级缓存。(默认的话是关闭)
3. Session : 是应用程序与持久层交互的单线程对象。它存活的时间比较短。
a. 它底层封装了数据库连接(Connection), 用完就要关闭.
b. 它是创建Transaction的工厂。
c. 必须开启的一级缓存。
d. 它是线程不安全的。(ThreadLocal)
4. Transaction : hibernate的事务,它底层封装了jdbc事务(局部事务),jta(分布式事务)
WebShere(IBM)、WebLogic(Oracle)、Jboss.
五、Hiberante的CRUD操作:
Session管理下持久化实体的状态。
a. transient : 瞬态。User u = new User();
b. persistent : 持久化。在Session的一级缓存中。在持久化状态下,对该实体所做修改,
会同步到底层的数据库。当调用session.flush()或者是transaction.commit().
session.contains(u) : 返回true, u就持久化状态。
c. detached : 脱管。脱离了Session管理,不在Session的一级缓存中,曾经被Session管理过。
User u = new User(); // 瞬态
u.setId(3); // 脱管
1. 添加( 瞬态 --> 持久化状态):
a. Serializable id = session.save(u); 立即发送insert语句,保存数据。(但是主键id要自增长).
u : 持久化状态
b. session.saveOrUpdate(u) : 添加或者修改. (先根据主键id查询做判断,是添加还是修改)。
u : 持久化状态
c. session.persist(u) : 延迟发送insert语句,保存数据。(跟事务是否开启有关系)
u : 持久化状态
d. User user = (User)session.merge(u) : 集成了添加与修改
// u : 瞬态 user : 持久化状态
2. 修改:
a. 在脱管状态下( 脱管---> 持久化状态):
session.update(u);
session.saveOrUpdate(u);
User user = (User)session.merge(u);
b. 在持久化状态下
根据主键id获取一个已持久化的对象,直接调用setter方法即可。
User user = get(User.class, 5);
user.setXxxxx();
3. 删除:
a. 在脱管状态下( 脱管---> 持久化状态):
User user = new User();
user.setId(5);
session.delete(user);
b. 在持久化状态下
User user = get(User.class, 5);
session.delete(user);
4. 根据主键查询:
session.get(User.class, 1) : 立即发送sql语句加载数据。
session.load(User.class, 1) : 延迟加载数据,它开始返回一个代理对象,
当你要真正用的时候才分发送sql语句。(当有真正用它时有可能会出现异常)
5. session.evict(entity) : 从session一级缓存中踢出entity.
session.clear() : 清空session一级缓存中所有实体。
注意:只加@Entity的话,持久化实体生所表名是它的类名列名就是实体属性名。
dtd位置:
hibernate-release-4.3.1.Final\project\hibernate-core\src\main\resources\org\hibernate
版权声明:本文为ldc5306590原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。