hibernate配置

上传人:zhu****ng 文档编号:244669448 上传时间:2024-10-05 格式:PPT 页数:41 大小:1.72MB
返回 下载 相关 举报
hibernate配置_第1页
第1页 / 共41页
hibernate配置_第2页
第2页 / 共41页
hibernate配置_第3页
第3页 / 共41页
点击查看更多>>
资源描述
标题标题标题,第一级,第二级,第三级,*,标题标题标题,第一级,第二级,第三级,Hibernate,配置,目 录,1 Hibernate,概述,2,第一个,Hibernate,程序,3 Hibernate,的配置文件,4,深入理解持久化对象,5,Hibernate,的映射文件,6,JPA Annotation介绍,7,本讲小结,Hibernate,体系结构,简要的Hibernate体系架构,Hibernate全面解决方案体系架构,Hibernate全面解决方案架构解释,SessionFactory,单个数据库映射关系经过编译后的内存镜像。,Session,它是应用程序和持久存储层之间交互操作的一个单线程对象,瞬态对象,系统进行,new,关键字进行创建的,Java,实例,没有,Session,相关联,此时处于瞬态,持久化对象,如果,PO,实例与,Session,实例关联起来,且该实例关联到数据库的记录,脱管对象,如果,PO,实例曾经与,Session,实例关联过,但是因为,Session,的关闭等原因,,PO,实例脱离了,Session,的管理,Hibernate全面解决方案架构解释,事务,(Transaction),代表一次原子操作,它具有数据库事务的概念,但它通过抽象,将应用程序从底层的具体的,JDBC,、,JTA,和,CORBA,事务中隔离开。,一个,Session,之内可能包含多个,Transaction,对象。,所有的持久化操作都应该在事务管理下进行,即使是只读操作。,连接提供者,(ConnectionProvider),生成,JDBC,的连接的工厂,同时具备连接池的作用,他通过抽象将底层的,DataSource,和,DriverManager,隔离开。这个对象仅在应用程序需要扩展时使用。,事务工厂,(TransactionFactory),生成,Transaction,对象实例的工厂,Hibernate,工作原理,Configuration,cfg,=new,Configuration().,configure(),;,Session s=sf.openSession();,mit();,s.close();,通过,Session,接口提供的各种方法操纵对数据库的访问,提交数据库操作结果,关闭,Session,连接,结束,利用上面创建的,Session,实例创建事务操作接口,Transaction,的一个实例,Transaction tx=s.beginTransaction();,包含了,Hibernate,所有运行期参数,SessionFactory sf=cfg.buildSessionFactory();,开始,启动,hibernate,构建,Configuration,实例,初始化该实例中的所有变量,加载,cfg.xml,配置文件到该实例(内存),通过,cfg.xml,文件中的,mapping,节点配置并加载,hbm.xml,文件至该实例(内存),利用上面的,Configuration,实例创建一个,SessionFactory,实例,利用上面创建的,SessionFactory,实例创建连接,从流程图中可以看出,,Hibernate,的执行过程如下:,(,1,)配置好,hibernate,的配置文件和与类对应的配置文件后,启动服务器。,(,2,)服务器通过实例化,Configeration,对象,读取,cfg.xml,文件的配置内容,并根据相关的需求建好表或者和表建立好映射关系。,(,3,)通过实例化的,Configeration,对象创建一个,sessionFactory,实例。,(,4,)通过,sessionFactory,实例可以创建,session,对象。,(,5,)得到,session,之后,便可以开始一个事务,然后就可以通过,Session,接口提供的各种方法操纵对数据库的访问。除了比较复杂的全文搜索外,简单的操作都可以通过,hibernate,封装好的,session,内置方法来实现。,(,6,)操作完成后,提交数据库操作结果,关闭,Session,连接。,Hibernate的配置,Configuration对象,org.cfg.Configuration实例代表一个应用程序到SQL数据库的映射配置,Configuration提供了一个buildSessionFactory()方法,该方法可以产生一个不可变的SessionFactory对象。,配置Hibernate的方式,使用properties文件作为配置文件。,使用cfg.xml文件作为配置文件。,不使用任何的配置文件,以编码方式来创建Configuration对象。,Hibernate的配置,JDBC连接属性配置,数据库方言配置,JNDI数据源的连接属性配置,Hibernate事物属性配置,二级缓存相关属性配置,外连接抓取属性配置,其他常用的配置,JDBC连接配置中最重要的设置,connection.driver_class,:设置连接数据库驱动。,connection.url,:设置所连接数据库服务的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和false两个值。,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,第一个,Hibernate,程序,3 Hibernate,的配置文件,4,深入理解持久化对象,5,Hibernate,的映射文件,6,JPA Annotation介绍,7,本讲小结,持久化类的要求,提供一个,无参的构造器,提供一个,标识属性,标识属性的类型尽量,避免基本类型,为持久化类的每个属性添加,set和get,方法,使用,非final类,重写,equal()和hashCode()方法,持久化对象的状态,持久化对象 PO=POJO+映射文件,PO可有以下的3种状态。,瞬态,:如果PO实例从未与Session实例关联过,该实例处于瞬态状态。,持久化,:如果PO 实例与Session实例关联起来,且该实例关联到数据库的记录。,脱管,:如果PO实例曾经与Session实例关联过,但是因为Session的关闭等原因,PO实例脱离了Session 的管理,这种状态被称为脱管状态。,对PO的操作必须在Session的管理下才能同步到数据库,Session由SessionFactory 工厂产生,SessionFactory是数据库编译后的内存镜像,通常一个对应一个SessionFactory对象。SessionFactory对象是由Configuration对象生成,Configuration负责加载Hibernate配置文件。,持久化对象的状态,瞬态,:对象由new操作符创建,且尚未Hibernate Session 关联的对象被认为处于瞬态。瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识,如果程序中失去了瞬态对象的引用,瞬态对象将会被垃圾回收机制销毁。使用Hibernate Session 可以将其变为持久化状态。,持久化对象的状态,持久化,:持久化实例在数据库中有对应的记录,并且拥有一个持久化标识。持久化的实例是可以刚刚保存的,也可以是刚刚被加载的,无论那一种,持久化对象都必须与指定的hibernate Session关联。hibernate会检测到处于持久化状态对象的改动,在当前操作执行完成时将对象数据写回数据库。开发者不需要手动执行UPDATE。,持久化对象的状态,脱管,:某个实例曾属于持久化状态,但随着与之关联的Session被关闭,该对象就变为了脱管态。对脱管对象的引用依然有效,对象可以被继续修改。如果让脱管对象与某个Session关联,那么这个脱管态对象将会重新转换为持久化状态,而脱管态期间的改动也不会丢失,也可被写入数据库。正是因为这个原因,逻辑上的长事务成为了可能,它被称为应用程序事务。即事务可以跨越用户的思考,因为当对象处于脱管态,对该对象操作无须锁定数据库,不会造成性能的下降,。,持久化对象的状态迁移,持久化实体:,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),也加了一个设定主键,把一个瞬态对象变成持久化状态:,-,/,创建消息对象,News n=new News();,/,设置消息标题和消息内容,n.setTitle(,疯狂,Java,联盟成立了,);,n.setContent(,疯狂,Java,联盟成立了,,+,网站地址,http:/www.crazyit.org);,/,保存消息,sess.save(n);,Get方法和Load方法的,区别,get():立即加载,对象的属性立即从数据库中去查找,load():延迟加载,对象的属性只有在使用的时候才从数据库中去查找,更新持久化实体:,sess.flush();,底层在,sess.flush(),之前生成一条,update,语句带有,where=,更新托管实体:,程序修改托管状态时,程序应该显式的使用新的,Session,来保存修改。,hibernate,提供了三个方法,Update,方法:如果持久化过时使用,save,方法:如果没有持久化过会时使用。,updateOrSave(),方法:,如果不记得该对象是否 持久化过时使用。,merge,方法与,update,方法功能相同,,区别:,执行,sess.merge(a),方法后,,a,对象不是持久化对象的状态。,而,Update,会把,a,变成持久化对象,删除持久化实体,delete,(),Session,的,delete,()方法能使一个持久化对象或临时脱管对象转化为临时对象。,对于脱管对象,,delete,()方法从数据库中删除与它对应的记录;,对于持久化对象,,delete,()从数据库中删除与它对应的记录,并且把它从,Session,的缓存中删除。,如:,sess2.delete(u);,close,(),当调用,Session,的,close,()时,,Session,的缓存被清空,缓存中的所有持久化对象都变为脱管对象。,如果在应用程序中没有引用这些脱管对象,它们就会结束生命周期。,evict,(),Session,的,evict,()能够从缓存中删除一个持久化对象,使它变为脱管状态。,当,Session,的缓存中保存了大量的持久化对象时,会消耗许多内存空间,为了
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!