




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、加载策略课课 程程 目标目标对象在Hibernate中的状态加载策略介绍lazy=”false”与fetch= “join”的区别 inverse=”true” insert=”false” update=”false” 对象在对象在HibernateHibernate中的状态中的状态临时状态普通的普通的JavaJava对象,只是一个携带信息的载体对象,只是一个携带信息的载体没与没与sessionsession实例关联,实例关联,没与数据库中记录关联没与数据库中记录关联持久状态持久实例在数据库中持久实例在数据库中有对应的记录,有对应的记录,并拥有持久化标识,并拥有持久化标识,持久实例可能是刚刚
2、被保存,持久实例可能是刚刚被保存,或刚刚被加载的数据或刚刚被加载的数据脱管状态持久对象关联的持久对象关联的SessionSession关闭后,关闭后,对象变为脱管对象变为脱管saveOrUpdate()?临时状态临时状态持久状态持久状态脱管状态脱管状态get()?load()?find()?iterator()?save()?update()?delete()?close()?clear()?update()?evict()?delete()?举例说明对象状态举例说明对象状态Session session = sessionFactory.openSession(); /开启连接开启连接tx
3、= session.beginTransaction(); /开启事务开启事务Employee emp = session.get(Employee.class, 123); /根据主键加载根据主键加载emp.setEmpName(“QQ”);/对持久对象进行更改,不需要更新对持久对象进行更改,不需要更新session.update(emp);/更新,此句没有必要更新,此句没有必要mit();session.close();emp.setEmpName(“QQ1”); /对脱管对象进行更改对脱管对象进行更改Session session2 = sessionFactory.openSessio
4、n(); /开启连接开启连接tx = session2.beginTransaction(); /开启事务开启事务session2.update(emp);.pubic class EmpDAOpublic static Employee getEmployeeById(Integer id) Session session = sessionFactory.openSession(); /开启连接开启连接tx = session.beginTransaction(); /开启事务开启事务Employee emp = (Employee)session.get(Employee.class,
5、id); /根据主键加载根据主键加载mit();session.close();. 忽略了异常处理忽略了异常处理return emp;Employee emp = EmpDAO.getEmployeeById(10011) ;/此时此时emp是什么状态?是什么状态?emp.setEmpName(“AA”);/数据库中数据库中empName值是什么?值是什么?加载策略介绍加载策略介绍我们知道,Hiberante是一个ORM工具,它使得我们能够直接去操纵对象而不是数据库中表。Hibernate的数据检索策略也是给予对对象的操作的。数据检索策略主要包括一下几种:立即加载,延迟加载,预先抓取和批量加载
6、。其中前三个是统一级别的,三个当中智能选择其中一个,而批量加载则可以很好的整合前面三个,还有就是预先抓取和批量加载都是为了优化前面两种方式而形成的。同时对于配置文件中的某个属性一旦设为预先抓取,则其它的数据检索方式都对这个属性失效。 下面分别进行讨论: 1 1 立即检索立即检索:立即检索的时候需要在配置文件添加属性lazy=false.当Hibernate在从数据库中取得字段值组装好一个对象后,会立即再组装此对象所关联的对象,如果这个对象还有关联对象,再组装这个关联对象;对于一对一和多对一的多的这段默认是采用立即加载,所以不需要配置;多对多和一对多就要配置lazy= false。 2 2 延迟
7、加载延迟加载:延迟加载不同,当组装完一个对象后,不立即组装和它关联的对象。 多对多和一对多默认采用延迟加载,一对一和多对一想实现延迟加载得配置lazy= true。 3 3 预先抓取预先抓取 :Hibernate 2.x版本:outer-join=true Hibernate 3.x版本:fetch=join。和立即检索相比,预先抓取可以减少SQL语句的条数,提高查询速度。 4 4 批量加载批量加载 :批量加载总是和立即加载或者延迟加载联系在一起的,分别为批量立即加载和批量延迟加载。HibernateHibernate加载策略加载策略为了提高效率,节省资源,提供了多种数据检索策略立即加载立即加
8、载延迟加载延迟加载预先抓取预先抓取批量加载批量加载同时使用同时使用同时使用同时使用立即加载立即加载从数据库取得字段值组装好一个对象后,会立即从数据库取出关联的附属对象,脱离Session后仍可以使用这些附属对象立即加载的适用情况:加载对象时,马上就要用到附属对象的数据一对一、多对一被关联对象是”一”这端的立即加载的配置为lazy=“false”lazy=“false”一对一、多对一默认就是立即加载,所以只有一对多、多对多的立即加载需要在元素中指定lazy=“false”延迟加载延迟加载从数据库取得字段值组装好一个对象后,并不会立即取出附属对象。这样做通常是为了节约内存资源因为一对多、多对多关系
9、如果设置为立即加载,将有可能会加载很多的附属对象而占据大量内存,因此这种情况常设置为延迟加载多对一、一对一设置延迟加载只需在标签中设置lazy=“true”加载策略举例加载策略举例一对一默认立即加载、一般不改动一对多默认延迟加载,通过设置lazy=”false”、或fetch=”join”实现立即加载,但一般一对多尽量设成lazy=”true”,当要实现立即加载时通过HQL语句的预先抓取join fetch实现多对一默认延迟加载,通过设置lazy=”false”或fetch=”join”实现立即加载下面以部门加载员工(一对多)为例: 部门对员工的加载策略配置如下: false:加载部门时立即加
10、载员工加载部门时立即加载员工true:加载部门时不加载员工加载部门时不加载员工/根据部门根据部门OID查找部门查找部门public Department getDeptById(Integer oid)Session session = HibernateSessionFactory.getSession();Transaction tx = session.beginTransaction();Department dept = (Department)session.get(Depaertment.class, oid);Set emps = dept.getEmployees();/不过
11、采用何种加载方式,这里没有错不过采用何种加载方式,这里没有错误误mit();session.close();return dept;Set emps = dept.getEmployees();/如果如果lazy=“true”,这里将出错,这里将出错显示部门详细信息显示部门详细信息如果部门对员工采用如果部门对员工采用的是延迟加载,那么的是延迟加载,那么这里将会出错这里将会出错lazy=”false”lazy=”false”与与fetch=fetch= “join”“join”的区别的区别 1、lazy=”false”,立即加载,一次只查一个表。产生语句过多,如果数据多的话查询效率较低2、fet
12、ch=”join”,使用连接查询,减少查询次数,提交查询效率下面通过例子说明:lazy=”false”lazy=”false”部门对员工采用lazy=”false”立即加载员工的配置及代码: public static void main(String args) Session session = HibernateSessionFactory.getSession(); Transaction tx = session.beginTransaction(); Department dept = (Department)session.get(Department.class, 51); m
13、it(); session.close(); System.out.println(部门名称:部门名称:+dept.getDeptName(); Set emps = dept.getEmployees(); for (Iterator iter = emps.iterator(); iter.hasNext();) Employee emp = (Employee) iter.next(); System.out.println(员工名字:员工名字:+emp.getEmpName(); lazy=”false”lazy=”false”执行main方法,得到控制台信息:fetch=join f
14、etch=join 部门对员工采用fetch=join预先抓取员工的配置及代码: public static void main(String args) Session session = HibernateSessionFactory.getSession(); Transaction tx = session.beginTransaction(); Department dept = (Department)session.get(Department.class, 51); mit(); session.close(); System.out.println(部门名称:部门名称:+de
15、pt.getDeptName(); Set emps = dept.getEmployees(); for (Iterator iter = emps.iterator(); iter.hasNext();) Employee emp = (Employee) iter.next(); System.out.println(员工名字:员工名字:+emp.getEmpName(); fetch=joinfetch=join执行main方法,得到控制台信息:我们可以很明显的看出,查询同样的数据,采用我们可以很明显的看出,查询同样的数据,采用fetch=“join”比用比用lazy=“false”少
16、了两条语句,提高了查询效率;当然,数据量越多,减少的少了两条语句,提高了查询效率;当然,数据量越多,减少的sql语句就越多语句就越多这里还得注意,如果你使用了这里还得注意,如果你使用了fetch=“join”,那么,那么HQL语句会忽略配置文件语句会忽略配置文件中的立即加载(当部门对员工中的立即加载(当部门对员工fetch=”join”并且使用并且使用HQL语句语句”from Department” 不会取出员工)。不会取出员工)。 inverseinverse属性属性inverseinverse属性表示将关系转由对方维护属性表示将关系转由对方维护session = HibernateSess
17、ionFactory.getSession(); /开启连接tx = session.beginTransaction(); /开启事务Department dept =(Department) session.get(Departemt.class,oid);dept.getEmployees.add(emp);/inverse=mit();session = HibernateSessionFactory.getSession(); /开启连接tx = session.beginTransaction(); /开启事务 Department dept=(Department ) session.get
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林农业大学《英语基础写作(一)》2023-2024学年第二学期期末试卷
- 哈尔滨体育学院《数字孪生与智能设计》2023-2024学年第二学期期末试卷
- 南京大学《现代设计技术》2023-2024学年第二学期期末试卷
- 广西大学《反垄断法》2023-2024学年第二学期期末试卷
- 安徽公安职业学院《数字法专题》2023-2024学年第二学期期末试卷
- 淮北职业技术学院《生化分离工程》2023-2024学年第二学期期末试卷
- 贵州工贸职业学院《景观可持续科学》2023-2024学年第二学期期末试卷
- 兰州职业技术学院《光电专业学科前沿》2023-2024学年第二学期期末试卷
- 一到二岁亲子早期教育
- 幼儿园食品安全教育教案(小班)
- 合伙人协议书模板
- 2025年中考第一次模拟考试卷:生物(成都卷)解析版
- 岁月不负母亲时光留住温情 课件高二下学期母亲节(5月11日)主题班会
- Unit 5 Animals Lesson 3 教学设计-人教精通版三年级英语下册
- 2025年河南空港数字城市开发建设有限公司第一批社会招聘20人笔试参考题库附带答案详解
- 2024年四川公安厅招聘警务辅助人员笔试真题
- 网站联盟广告专题报告
- 广东入团考试试题及答案
- 从实践中学习医疗人文关怀的案例分享
- 2025年上半年重庆合川区招考事业单位工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 平安人寿代理合同协议
评论
0/150
提交评论