itcast_hibernate

合集下载

hibernate配置

hibernate配置
属性可以是update、create和drop-create三个值。
目录
1 Hibernate概述 2 第一个Hibernate程序 3 Hibernate的配置文件 4 深入理解持久化对象 5 Hibernate的映射文件 6持久化对象 如果PO 实例与Session实例关联起来,且该实例关联到数据库的记录
脱管对象 如果PO实例曾经与Session实例关联过,但是因为Session的关闭等原 因,PO实例脱离了Session 的管理
Hibernate全面解决方案架构解释
事务(Transaction) 代表一次原子操作,它具有数据库事务的概念 但它通过抽象,将应用程序从底层的具体的JDBC、JTA和CORBA 事务中隔离开。 一个Session 之内可能包含多个Transaction对象。 所有的持久化操作都应该在事务管理下进行,即使是只读操作。
管态,对该对象操作无须锁定数据库,不会造成性能的下降。
持久化对象的状态迁移
持久化实体: 1、Serializable save(object obj) 将对象变为持久化状态 2、void persist(object obj) 将对象转化为持久化状态 3、Serializable save(object obj,object pk) 将obj对象转化为持久化状态,该对象保存到数据库,指定主键值 4、void persist(object obj,object pk) 也加了一个设定主键
Hibernate工作原理
Configuration cfg = new Configuration().configure();
开始
启动hibernate
构建Configuration 实例,初始 化该实例中的所有变量

06 Hibernate一级缓存

06 Hibernate一级缓存
—高级软件人才实作培训专家 !
Hibernate一级缓存
北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate缓存


缓存是存储数据的临时空间,减少从数据库中查询 数据的次数 Hibernate中提供有两种缓存机制
一级缓存(Hibernate自身携带) 二级缓存(使用外部技术)
北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate操作一级缓存

刷新一级缓存
s.flush();

清除一级缓存
s.clear();

清除一级缓存中指定对象
s.evict(obj);

按照OID重新加载一级缓存中的PO(使用数据库中数 据覆盖一级缓存数据及快照数据)
s.refresh(obj);
北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate一级缓存刷新时机(了解)


所谓Hibernate一级缓存刷新时机指一级缓存中存在的 修改数据何时会被同步到数据库表中 刷新时机有四种(FlushModel常量)
ALWAYS:任意操作导致刷新(效率过低) AUTO:根据操作功能区别是否刷新(默认) COMMIT:提交事务时刷新 MANUAL:手动执行刷新时进行刷新(提交事务不会触发)
进行属性更新,只会产生一条update语句,此时PO状态的改 变会在缓存进行刷新时才完成最终操作,除非提前刷新缓存 PO属性的更新无需调用update操作,缓存刷新时自动完成
北京传智播客教育
—高级软件人才实作培训专家 ! update操作的注意事项(2)

update将DO→PO操作会强制完成一次更新操作, 无论数据是否发生变化,此时可根据业务需要选择

Hibernate工作原理及其作用(word文档良心出品)

Hibernate工作原理及其作用(word文档良心出品)

Hibernate工作原理及其作用原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提交事务7.关闭Session8.关闭SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。

他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

4. hibernate的性能非常好,因为它是个轻量级框架。

映射的灵活性很出色。

它支持各种关系数据库,从一对一到多对多的各种复杂关系。

2.Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。

3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、4.说下Hibernate的缓存机制1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存2. 二级缓存:a) 应用及缓存b) 分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据c) 第三方缓存的实现5.Hibernate的查询方式Sql、Criteria,object comptosition Hql:1、属性查询2、参数查询、命名参数查询3、关联查询4、分页查询5、统计函数6.如何优化Hibernate?1.使用双向一对多关联,不使用单向一对多2.灵活使用单向一对多关联3.不用一对一,用多对一取代4.配置对象缓存,不使用集合缓存5.一对多集合使用Bag,多对多集合使用Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰Hibernate的原理--ORM--------------------------------------------------------------------------1.启动Hibernate2.构建Configuration实例,初始化实例中的所有变量.Configuration cfg=new Configuration.configure();加载hibernate.cfg.xml文件至该实例(内存)通过hibernate.cfg.xml文件中的mapping节点配置并加载.hbm.xml文件至该实例(内存)3.利用上面创建的Configuration实例构建一个SessionFactory实例SessionFactory sessionFactory=cfg.getSessionFactory();4.由上面香到的SessionFactory实例创建连接Session=sessionFactory.getSession();5.由上面得到的Session实例创建事务操作接口,Transaction的一个实例txTransaction tx=session.beginTransaction();6.通过Session接口提供的各种方法操纵对数据库的访问.7.提交数据操作结果.mit();8.关闭数据连接.session.close();Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

itcast_hibernate

itcast_hibernate

—高级软件人才实作培训专家!
基本概念和CURD
Domain Object限制 1.默认的构造方法(必须的)。 2有无意义的标示符id(主键)(可选) 3非final的,对懒加载有影响(可选) Domain Java Object(User)
public class User { private int id; private String name; private Date birthDay; //getter setter… }
Criteria
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式: Criteria crit = session.createCriteria(DomainClass.class); 简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)), criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
北京传智播客教育
—高级软件人才实作培训专家!
关联映射
一对一(Person - IdCard) 1)基于主键的one-to-one(person的映射文件)
<id name=‖id‖> <generator class=‖foreign‖><param name=‖property‖>idCard</param></generator> <id> <one-to-one name=‖idCard‖ constrained=‖true‖/>
FK1
北京传智播客教育

传智播客hibernate教程

传智播客hibernate教程

北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
基本概念和CURD
Java代码 代码 1.初始化代码 只做一次 初始化代码(只做一次 初始化代码 只做一次)
Configuration cfg = new Configuration(); cfg.configure(“config.cfg.xml”); 也可以通过cfg.setProperty设置属性。 SessionFactory sessionFactory = cfg.buildSessionFactory();
Criteria
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式: Criteria crit = session.createCriteria(DomainClass.class); 简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)), criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
关联映射
多对一(Employee - Department) 一对多(Department-Employee) 一对一(room - door) 多对多(teacher - student) 组件映射(User-Name) 集合映射(set, list, map, bag) inverse和cascade(Employee – Department)
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!

二级缓存

二级缓存

二级缓存1.二级缓存相关介绍①缓存好处:将数据库或者硬盘数据,保存在内存中,减少数据库查询次数,减少硬盘交互,提高检索效率hibernate 共有两个级别的缓存* 一级缓存,保存Session中,事务范围的缓存* 二级缓存,保存SessionFactory ,进程范围的缓存SessionFacoty 两部分缓存内置:Hibernate 自带的, 不可卸载. 通常在Hibernate 的初始化阶段, Hibernate 会把映射元数据和预定义的SQL 语句放到SessionFactory 的缓存中, 映射元数据是映射文件中数据的复制, 而预定义SQL 语句时Hibernate 根据映射元数据推到出来的. 该内置缓存是只读的.外置:一个可配置的缓存插件. 在默认情况下, SessionFactory 不会启用这个缓存插件. 外置缓存中的数据是数据库数据的复制, 外置缓存的物理介质可以是内存或硬盘,必须引入第三方缓存插件才能使用。

2.二级缓存内部结构学习* 类缓存区域* 集合缓存区域* 更新时间戳区域* 查询缓存区域3.二级缓存并发策略transactional :提供Repeatable Read事务隔离级别,缓存支持事务,发生异常的时候,缓存也能够回滚read-write :提供Read Committed事务隔离级别,更新缓存的时候会锁定缓存中的数据nonstrict-read-write :导致脏读,很少使用read-only :数据不允许修改,只能查询* 很少被修改,不是很重要,允许偶尔的并发问题,适合放入二级缓存。

考虑因素(二级缓存的监控【后面学习】,它是是否采用二级缓存主要参考指标)4.hibernate 支持二级缓存技术* EHCache (主要学习,支持本地缓存,支持分布式缓存)可作为进程范围内的缓存, 存放数据的物理介质可以是内存或硬盘, 对Hibernate 的查询缓存提供了支持。

传智播客Hibernate课件

传智播客Hibernate课件

北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate入门
9.通过id查询客户信息
北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate入门
10. 查询所有的客户信息
北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate入门
}
北京传智播客教育
—高级软件人才实作培训专家 ! Hibernate入门
3 创建对象-关系映射文件 Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句 映射文件的扩展名为 .hbm.xml 这里Customer.hbm.xml文件
date
timestamp
BIRTHDAY
REGISTERED_TI ME
DATE
TIMESTAMP
汉语(java)
英语(hibernate)
北京传智播客教育
日语(sql)
—高级软件人才实作培训专家 ! Hibernate入门
北京传智播客教育
2 创建表和对应的javaBean文件(持久化类)
create table customer ( id int primary key, name varchar(12), age int, des text ) public class Customer { private private private private Integer id; String name; Integer age; String des;
char
boolean ng.String byte[]
character

Hibernate包作用详解Java教程

Hibernate包作用详解Java教程
commons-beanutils.jar: Apache Commons 包中的一个,包含了一些 Bean 工具类类。 必需运用的 jar 包。
commons-lang.jar: Apache Commons 包中的一个,包含了一些数据类型工具类,
第2页 共7页
是 ng.*的扩展。必需运用的 jar 包。
第4页 共7页
DBCP 数据库连接池,Apache 的 Jakarta 组织开发的,Tomcat4 的连接池也是 DBCP。
事实上 Hibernate 自己也实现了一个特别特别简洁的数据库 连接池,加上上面 3 个,你事实上可以在 Hibernate 上选择 4 种 不同的数据库连接池,选择哪一个看个人的偏好,不过 DBCP 可能 更通用一些。另外强调一点,假如在 EJB 中运用 Hibernate,必 须要用 App Server 的连接池,不要用以上 4 种连接池,否那么容 器管理事务不起作用。
第3页 共7页
commons-logging.jar 也是必需的 jar 包。
运用 Hibernate 必需的 jar 包就是以上的这几个,剩下的都 是可选的。
ant.jar: Ant 编译工具的 jar 包,用来编译 Hibernate 源代码的。假 如你不打算修改和编译 Hibernate 源代码,那么就没有什么用, 可选的 jar 包
后来 Apache 就开发出来了 commons-logging.jar 用来兼容两 个 logger。因此用 commons-logging.jar 写的 log 程序,底层的 Logger 是可以切换的,你可以选择 log4j,java.util.logging 或者它自带的 Simple Logger。不过我仍旧剧烈建议运用 log4j, 因为 log4j 性能很高,log 输出信息时间几乎等于 System.out, 而处理一条 log 平均只须要 5us。你可以在 Hibernate 的 src 书 目下找到 Hibernate 已经为你打算好了的 log4j 的配置文件,你 只 须 要 到 Apache 网 站 去 下 载 log4j 就 可 以 了 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

14.
最佳实践
北京传智播客教育
—高级软件人才实作培训专家!
引入


模型不匹配(阻抗不匹配) Java面向对象语言,对象模型,其主要概念有:继承、关联、 多态等;数据库是关系模型,其主要概念有:表、主键、外键 等。 解决办法 1使用JDBC手工转换。 2使用ORM(Object Relation Mapping对象关系映射)框架来解 决,主流的ORM框架有Hibernate、TopLink、OJB。
—高级软件人才实作培训专家!
基本概念和CURD
Domain Object限制 1.默认的构造方法(必须的)。 2有无意义的标示符id(主键)(可选) 3非final的,对懒加载有影响(可选) Domain Java Object(User)
public class User { private int id; private String name; private Date birthDay; //getter setter… }
—高级软件人才实作培训专家!
Hibernate原理与应用
讲师:李勇
北京传智播客教育
—高级软件人才实作培训专家!
主要内容
1. 2. 3. 4. 5. 6. 7.
8.
9. 10. 11. 12. 13.
引入 安装配置 基本概念和CURD HQL和Criteria 关联映射 继承映射 集合映射 懒加载 缓存 事务 其他 Hibernate不适合的场景 与JPA的集成(annotation方式)
FK1
北京传智播客教育
—高级软件人才实作培训专家!
关联映射
一对多(Department-Employee) <set name=‖employees‖> <key column=‖depart_id‖/> <one-to-many class=‖Employee‖/> </set>
北京传智播客教育
—高级软件人才实作培训专家!
关联映射
多对一(Employee - Department) 映射文件<many-to-one name=‖depart‖ column=‖depart_id‖/> ER图
department PK id name PK employee id name depart_id
北京传智播客教育
—高级软件人才实作培训专家! 基本功能练习
实验步骤: 1.设计domain对象User。 2.设计UserDao接口。 3.加入hibernate.jar和其依赖的包。 4.编写User.hbm.xml映射文件,可以基于hibernate/eg目录下的 org/hibernate/auction/User.hbm.xml修改。 5.编写hibernate.cfg.xml配置文件,可以基于 hibernate/etc/hibernate.cfg.xml修改;必须提供的几个参数: connection.driver_class、connection.url、ername、 connection.password、dialect、hbm2ddl.auto。 6.编写HibernateUtils类,主要用来完成Hibnerate初始化和提供一个获得 Session的方法;这步可选。 7.实现UserDao接口。
北京传智播客教育
—高级软件人才实作培训专家!
关联映射
一对一(Person - IdCard) 1)基于主键的one-to-one(person的映射文件)
<id name=‖id‖> <generator class=‖foreign‖><param name=‖property‖>idCard</param></generator> <id> <one-to-one name=‖idCard‖ constrained=‖true‖/>
2.模板代码
Session session = null;Transaction tx = null; try{ session = sessionFactory.openSession(); tx = session.beginTransaction(); //…你的代码save,delete,update,get… mit(); }catch(Exception e){ if(tx !=null)tx.rollback();throw e; }finally{ if(session != null)session.close(); } 北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家!
关联映射




多对一(Employee - Department) 一对多(Department-Employee) 一对一(room - door) 多对多(teacher - student) 组件映射(User-Name) 集合映射(set, list, map, bag) inverse和cascade(Employee – Department)
Criteria
Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式: Criteria crit = session.createCriteria(DomainClass.class); 简单属性条件如:criteria.add(Restrictions.eq(propertyName, value)), criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
北京传智播客教育
—高级软件人才实作培训专家!
基本概念和CURD
开发流程 1由Domain object -> mapping->db。(官方推荐) 2由DB开始,用工具生成mapping和Domain object。(使用较多) 3由映射文件开始。
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 基本功能练习
实现UserDao public interface UserDao { public void saveUser(User user); public User findUserById(int id); public User findUserByName(String name); public void updateUser(User user); public void remove(User user); }
person PK id name age id_card PK,FK1 id useful_life
北京传智播客教育
—高级软件人才实作培训专家!
关联映射
一对一(Person - IdCard)
2)基于外健的one-to-one,可以描述为多对一,加unique=―true‖约束 <one-to-one name=‖idCard‖ property-ref=―person‖/>
北京传智播客教育
—高级软件人才实作培训专家!
基本概念和CURD
Java代码 初始化代码(只做一次)
Configuration cfg = new Configuration(); cfg.configure(“config.cfg.xml”); 也可以通过cfg.setProperty设置属性。 SessionFactory sessionFactory = cfg.buildSessionFactory();
北京传智播客教育
—高级软件人才实作培训专家! 对象状态
北京传智播客教育
—高级软件人才实作培训专家! HQL和Criteria
HQL(Hibernate Query Language)
面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类 和属性其他部分不区分大小写);HQL中查的是对象而不是和表,并且支持多态; HQL主要通过Query来操作,Query的创建方式: Query q = session.createQuery(hql); from Person from User user where =:name from User user where =:name and user.birthday < :birthday
北京传智播客教育
—高级软件人才实作培训专家!
安装配置


配置文件hibernate.cfg.xml和hibernate.properties,XML和 properties两种,这两个文件的作用一样,提供一个即可,推荐 XML格式,下载目录/etc下是示例配置文件。 可以在配置文件指定: 数据库的URL、用户名、密码、JDBC驱动类、方言等。 启动时Hibernate会在CLASSPATH里找这个配置文件。 映射文件(hbm.xml,对象模型和关系模型的映射)。在/eg目录下有 完整的hibernate示例。 快速开始小例子
北京传智播客教育
—高级软件人才实作培训专家! 对象状态



瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM 垃圾回收器回收,一般是new出来且与session没有关联的对象。 持久(persistent):数据库中有数据与之对应,当前与session有关联, 并且相关联的session没有关闭,事务没有提交;持久对象状态发生 改变,在事务提交时会影响到数据库(hibernate能检测到)。 脱管(detached):数据库中有数据与之对应,但当前没有session与之 关联;托管对象状态发生改变,hibernate不能检测到。
相关文档
最新文档