hibernate配置

上传人:101****457 文档编号:89984678 上传时间:2019-06-05 格式:PPT 页数:41 大小:1.86MB
返回 下载 相关 举报
hibernate配置_第1页
第1页 / 共41页
hibernate配置_第2页
第2页 / 共41页
hibernate配置_第3页
第3页 / 共41页
hibernate配置_第4页
第4页 / 共41页
hibernate配置_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《hibernate配置》由会员分享,可在线阅读,更多相关《hibernate配置(41页珍藏版)》请在金锄头文库上搜索。

1、Hibernate配置,目 录,1 Hibernate概述 2 第一个Hibernate程序 3 Hibernate的配置文件 4 深入理解持久化对象 5 Hibernate的映射文件 6 JPA Annotation介绍 7 本讲小结,Hibernate体系结构,简要的Hibernate体系架构,Hibernate全面解决方案体系架构,Hibernate全面解决方案架构解释,SessionFactory 单个数据库映射关系经过编译后的内存镜像。 Session 它是应用程序和持久存储层之间交互操作的一个单线程对象 瞬态对象 系统进行new关键字进行创建的Java 实例,没有Session 相

2、关联,此时处于瞬态 持久化对象 如果PO 实例与Session实例关联起来,且该实例关联到数据库的记录 脱管对象 如果PO实例曾经与Session实例关联过,但是因为Session的关闭等原因,PO实例脱离了Session 的管理,Hibernate全面解决方案架构解释,事务(Transaction) 代表一次原子操作,它具有数据库事务的概念 但它通过抽象,将应用程序从底层的具体的JDBC、JTA和CORBA事务中隔离开。 一个Session 之内可能包含多个Transaction对象。 所有的持久化操作都应该在事务管理下进行,即使是只读操作。 连接提供者(ConnectionProvider

3、) 生成JDBC的连接的工厂,同时具备连接池的作用 他通过抽象将底层的DataSource和DriverManager隔离开。这个对象仅在应用程序需要扩展时使用。 事务工厂(TransactionFactory) 生成Transaction对象实例的工厂,Hibernate工作原理,从流程图中可以看出,Hibernate的执行过程如下: (1)配置好hibernate的配置文件和与类对应的配置文件后,启动服务器。 (2)服务器通过实例化Configeration对象,读取cfg.xml文件的配置内容,并根据相关的需求建好表或者和表建立好映射关系。 (3)通过实例化的Configeration对

4、象创建一个sessionFactory实例。 (4)通过sessionFactory实例可以创建session对象。 (5)得到session之后,便可以开始一个事务,然后就可以通过Session接口提供的各种方法操纵对数据库的访问。除了比较复杂的全文搜索外,简单的操作都可以通过hibernate封装好的session内置方法来实现。 (6)操作完成后,提交数据库操作结果,关闭Session连接。,Hibernate的配置,Configuration对象 org.cfg.Configuration实例代表一个应用程序到SQL数据库的映射配置,Configuration提供了一个buildSes

5、sionFactory()方法,该方法可以产生一个不可变的SessionFactory对象。 配置Hibernate的方式 使用properties文件作为配置文件。 使用cfg.xml文件作为配置文件。 不使用任何的配置文件,以编码方式来创建Configuration对象。,Hibernate的配置,JDBC连接属性配置 数据库方言配置 JNDI数据源的连接属性配置 Hibernate事物属性配置 二级缓存相关属性配置 外连接抓取属性配置 其他常用的配置,JDBC连接配置中最重要的设置,connection.driver_class:设置连接数据库驱动。 connection.url:设置所

6、连接数据库服务的URL。 connection.username:连接数据库的用户名。 connection.password:连接数据库的密码。 connection.pool_size:设置hibernate数据库连接池的最大并发连接数。 dialect:设置数据库连接所使用的方言。,其他常用的配置属性,show_sql:是否在控制台输出Hibernate生成的SQL语句,只能为true或者false两个值 format_sql:是否将SQL语句转换成格式良好的SQL语句。 use_sql_comments:是否在Hibernate生成的SQL语句中添加有助于调试的注视,只接受true和f

7、alse两个值。 jdbc.fetch_size:指定JDBC抓取数量的大小,它可以接受一个整数值,其实质是调用Statement.setFetchSize()方法。 jdbc.batch_size:指定Hibernate使用JDBC2的批量更新的大小,它可接受一个整数值,建议是取5到30之间。 connection.autocommit:设置是否自动提交。通常不建议自动提交。 hbm2ddl.auto:设置当创建SessionFactory是,将Drop刚建的数据表。该属性可以是update、create和drop-create三个值。,目 录,1 Hibernate概述 2 第一个Hibe

8、rnate程序 3 Hibernate的配置文件 4 深入理解持久化对象 5 Hibernate的映射文件 6 JPA Annotation介绍 7 本讲小结,持久化类的要求,提供一个无参的构造器 提供一个标识属性 标识属性的类型尽量避免基本类型 为持久化类的每个属性添加set和get方法 使用非final类 重写equal()和hashCode()方法,持久化对象的状态,持久化对象 PO = POJO + 映射文件 PO可有以下的3种状态。 瞬态:如果PO实例从未与Session实例关联过,该实例处于瞬态状态。 持久化:如果PO 实例与Session实例关联起来,且该实例关联到数据库的记录。

9、 脱管:如果PO实例曾经与Session实例关联过,但是因为Session的关闭等原因,PO实例脱离了Session 的管理,这种状态被称为脱管状态。 对PO的操作必须在Session的管理下才能同步到数据库,Session由SessionFactory 工厂产生,SessionFactory是数据库编译后的内存镜像,通常一个对应一个SessionFactory对象。SessionFactory对象是由Configuration对象生成,Configuration负责加载Hibernate配置文件。,持久化对象的状态,瞬态:对象由new操作符创建,且尚未Hibernate Session 关联

10、的对象被认为处于瞬态。瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识,如果程序中失去了瞬态对象的引用,瞬态对象将会被垃圾回收机制销毁。使用Hibernate Session 可以将其变为持久化状态。,持久化对象的状态,持久化:持久化实例在数据库中有对应的记录,并且拥有一个持久化标识。持久化的实例是可以刚刚保存的,也可以是刚刚被加载的,无论那一种,持久化对象都必须与指定的hibernate Session关联。hibernate会检测到处于持久化状态对象的改动,在当前操作执行完成时将对象数据写回数据库。开发者不需要手动执行UPDATE。,持久化对象的状态,脱管:某个实例曾属于持久化状态,

11、但随着与之关联的Session被关闭,该对象就变为了脱管态。对脱管对象的引用依然有效,对象可以被继续修改。如果让脱管对象与某个Session关联,那么这个脱管态对象将会重新转换为持久化状态,而脱管态期间的改动也不会丢失,也可被写入数据库。正是因为这个原因,逻辑上的长事务成为了可能,它被称为应用程序事务。即事务可以跨越用户的思考,因为当对象处于脱管态,对该对象操作无须锁定数据库,不会造成性能的下降。,持久化对象的状态迁移,持久化实体: 1、Serializable save(object obj) 将对象变为持久化状态 2、void persist(object obj) 将对象转化为持久化状态

12、 3、Serializable save(object obj,object pk) 将obj对象转化为持久化状态,该对象保存到数据库,指定主键值 4、void persist(object obj,object pk) 也加了一个设定主键,把一个瞬态对象变成持久化状态: - / 创建消息对象 News n = new News(); / 设置消息标题和消息内容 n.setTitle(“疯狂Java联盟成立了“); n.setContent(“疯狂Java联盟成立了,“ + “网站地址http:/www.crazyit.org“); / 保存消息 sess.save(n);,Get方法和Loa

13、d方法的区别,get():立即加载 对象的属性立即从数据库中去查找 load():延迟加载 对象的属性只有在使用的时候才从数据库中去查找,更新持久化实体: u.setUserName(“123123123123“); sess.flush(); 底层在sess.flush()之前生成一条update语句带有where=,更新托管实体: 程序修改托管状态时,程序应该显式的使用新的Session来保存修改。 hibernate提供了三个方法 Update方法:如果持久化过时使用 save方法:如果没有持久化过会时使用。 updateOrSave()方法: 如果不记得该对象是否 持久化过时使用。,m

14、erge方法与update方法功能相同 , 区别: 执行sess.merge(a)方法后,a对象不是持久化对象的状态。 而Update会把a变成持久化对象,删除持久化实体 delete() Session的delete()方法能使一个持久化对象或临时脱管对象转化为临时对象。 对于脱管对象,delete()方法从数据库中删除与它对应的记录; 对于持久化对象,delete()从数据库中删除与它对应的记录,并且把它从Session的缓存中删除。 如:sess2.delete(u);,close() 当调用Session的close()时,Session的缓存被清空,缓存中的所有持久化对象都变为脱管对

15、象。 如果在应用程序中没有引用这些脱管对象,它们就会结束生命周期。 evict() Session的evict()能够从缓存中删除一个持久化对象,使它变为脱管状态。 当Session的缓存中保存了大量的持久化对象时,会消耗许多内存空间,为了提高性能,可以考虑调用evict(),从缓存中删除一些持久化对象。 但不推荐使用evict()。,1.save,persist保存数据,persist在事务外不会产生insert语句。 2.delete,删除对象 3.update,更新对象,如果数据库中没有记录,会出现异常。 4.get,根据ID查,会立刻访问数据库。 5.Load,根据ID查,(返回的是代

16、理,不会立即访问数据库)。 6.saveOrUpdate,merge(根据ID和version的值来确定是save或update),调用merge你的对象还是托管的。 7.lock(把对象变成持久对象,但不会同步对象的状态)。,通过Session完成基本操作,Hibernate对数据库的基本操作是通过Session来完成的。 Session提供了基本的保存、更新、删除和查询的方法。,1 保存数据,session.save()方法用于实体对象的持久化保存。 如: session.save()方法执行时,并不会马上更新数据库库,只有在session清理缓存时才有可能执行insert语句。,Person user = new Person(); user.setName(“zx“); Transaction tx = session.beginTransaction(); session.save(user); session.flush(); mit(); se

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号