Hibernate映射_第1页
Hibernate映射_第2页
Hibernate映射_第3页
Hibernate映射_第4页
Hibernate映射_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Hibernate or/mappingSuns at Beijing.China2022/7/91双向一对多关系中inverse的作用在双向的一对多关联中,如果主控方的inverse的属性设置为true那么他将失去主控方的位置,交给被动方去担当这个角色他的英文直译为反转,在hibernate中,Inverse指定了关联关系中的方向。在关联关系中,inverse=false的一方为主动方.由他来负责维护关联关系。而CasCade表明了对象的级联关系,如果他的属性等与 all 那么表明如果主控方的对象发生改变,那么被关联的对象一起发生改变,Inverse是关联关系的控制方向,Cascade 是层

2、级之间的连锁关系,在one to many 中把many的一方设置为主控方有助改善性能。减少一倍的SQL操作.对数据库的IO性能有很大的提升,几乎是两倍2022/7/92Hibernate 数据检索Criteria Query 面向对象的查询。简单的来讲,她是传统SQL语句的对象化的表示。她本身只是一个查询容器,具体的查询条件需要通过他的add方法添加到Criteria实例中其中他的详细用法见在hibernate3中引入了Restrictions来代替Expressin,他的用法和Expression一致,实际上Expression作为Restrictions的一个子类的实现。由于Creter

3、ia不能得到尽量的重用,那么hibernate3 中,提供了,Criteria 的实现,DetachCriteria类,他可以脱离Session独立存在,2022/7/93Hibernate Criteria高级数据检索通过Criteria 的SetFristResult/setMaxResult方法可以限制一次查询返回的记录范围,Criteria criteria =session.create Criteria (Tuser.class);Criteria. setFristResult(100);Criteria. setMaxResult(20);记录排序。使用他的addOrder方法

4、用法.Criteria.addOrder(Order.asc(“name”);Criteria.addOrder(Order.desc(“groupId”);其他的用法请参阅其他资料。2022/7/94Hibernate Query Language(HQL)可以理解为面向对象的查询方法String hql=“from Tuser”;Query query=session.createQuery(hql);List userList=query.list();需要注意的是在hibernate 中,查询的目标实体存在的继承关系的判定,如果你的Tuser有两个子类的实现,那么在查询过程中,会把子类

5、的数据一起查询出来,即使他们不在同一张表上,2022/7/95Hibernate 延迟加载数据加载方式。1:即时加载,当实体加载完成以后,立即加载所关联的数据,2:延迟加载,实体加载时,和他关联的数据不会被立刻加载,而是关联的数据第一次被访问的时候,再进行读取.3:预先加载,实体和关联对象一起被加载,不过这个加载是通过执行一条(1条SQL)来完成,基于外连接outer join同时读取.4:批量加载,对于即时加载和延迟加载,可以使用批量加载的方式在性能上的优化。延迟加载:在主控方,也就是set的一方设置lazy=ture表明是延迟加载(懒汉式加载)2022/7/96Hibernate 3 sq

6、l查询由于HQL语句不能函盖所有查询特性,我们不得不使用,原生的SQL语句和存储过程来达到我们预期的效果,与Criteria和HQL互为补充,hibernate 也提供了对SQL和存储过程的支持,在hibernate 中,如果需要调用存储过程,还得必须调用底层的JDBC的API来实现,在对应的XML文件中如下配置.(查询,mysql) call getUserList() 2022/7/97Hibernate 3 sql查询由于HQL语句不能函盖所有查询特性,我们不得不使用,原生的SQL语句和存储过程来达到我们预期的效果,与Criteria和HQL互为补充,hibernate 也提供了对SQL

7、和存储过程的支持,在hibernate 中,如果需要调用存储过程,还得必须调用底层的JDBC的API来实现,不过尽量推荐饶过HIBERNATE的API直接去调用JDBC比较好,个人认为配置太麻烦,而且,存储过程去执行数据库的操作一向是高效率的。对应的增,删,改,可以写进去一个存储过程,在oracle中存储过程不能返回结果集,那么只能去用游标来实现,处理结果集。2022/7/98Hibernate 3 自定义持久化的实现对于自定义的实现,配置文件中增加了三个新的节点定义,sql-insert sql-update sql-delete通过3个节点我们可以避免 hibernate自动化所带来的问题

8、,如下: INSERT INTO T_USER(ID,NAME,AGE)VALUES(?,?,?) 那么在API调用的时候,就不需要session.save方法了。如下:Tracsaction tx=session.beginTracsctin();Tuser user=(Tuser)session.get(Tuser.class,new Integer(1);User.setName(user.getName.toLowerCase();User.setAge(new Integer(1);mit();Session.close();2022/7/99Hibernate 3 自定义持久化的实

9、现另外除了以上三个新节点以外,还有一个可选的属性,callable 如果此属性为true。则当前节点所定义的SQL将被作为存储过程加已执行,如下?=call deleteUser(?)2022/7/910Hibernate 3 数据缓存缓存是数据在内存中的临时容器,包含了数据在内存中的临时拷贝,位于数据库和数据访问层之间。ORM在进行数据读取的时候,会根据其缓存管理策略,首先在缓存中查询,如果在缓存中发现了所需的数据,就直接所谓查询结果使用,也称为缓存命中,ORM的缓存策略包含以下几个层次1:事务级缓存(Transaction Layer Cache)2:应用级/进程级缓存,(Applicat

10、ion /Process Layer Cache)3:分布式缓存(Cluster Layer Cache)2022/7/911Hibernate 3 数据缓存Hibernate 数据缓存分为两个层次,hibernate语意加以区分,可分为1:内部缓存,(Session Level)也称一级缓存(数据事务级缓存)2:二级缓存,(SessionFactory Level)二级缓存在hibernate中,缓存在以下几个地方发生作用,1:通过主键加载数据,2:延迟加载实际上Session在内部维护了一个MAP数据类型,此数据类型中保持了所有与当前Session关联的数据对象。这些MAP结构为Sessi

11、on的私有数据,伴随Sessino 实例的创建和消亡,因此,有时候也称为,内部缓存内部缓存正常情况下,由Hibernate自动维护,如果需要手动维护,通过下面的方法实现,1:Session.evict将某一个对象从缓存中清理,2:Session.clear 清空所有缓存,2022/7/912Hibernate 3 事务管理概述在SessionFactory.openSession()中,Hibernate会初始化数据库连接,在此同时,将他的AutoCommit设置为关闭。然后Session.beginTransaction方法中hibernate 会再次确认connection中的AutoCo

12、mmit 属性被设为关闭状态,为了防止对session的connection.AutoCommit属性进行修改,2022/7/913Hibernate 3 锁的使用Hibernate 支持两种锁机制,悲观锁,乐观锁一个典型的依赖数据库实现的悲观锁的调用,Select * from accont where name=“zhangsan” for updateFor update 语句的作用就是锁定了,表中符合查询条件的记录,外界无法再修改,效率比较低代码的实现String hqlstr=“from Tuser as user where =shangsan;Query query =sessi

13、on.createQuery(hqlstr);Query.setLockMode(“user”,LockMode.UPDATE)/加锁List list=query.list();2022/7/914Hibernate 3 锁的使用乐观锁的实现,大多是基于数据版本(Version)记录机制实现的,在数据库中加一个字段,Version。读取数据的时候,会讲版本号一起读出来,进行对比,例子:首先我们通过配置文件中的class属性加上,opeimistic-look=“version”属性,他有四种取值 none version dirty,all Hibernate 推荐使用, version在配置文件中增加Version节点,这个节点,必须在ID节点之后,2022/7/915Hibernate 3 c3p0连接池的配置 org.hibernate.connection.C3P0ConnectionProvider205120100 12022022/7/916Hibernate 3 proxool连接池的配置 首先先在hibernate.cfg.xml的目录下建立proxoll.xml文件内容如下DBPooljdbc:oracle:thin:0:1521:app

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论