1.Hibernate工作原理及为什么要用?
原理:
1.读取并解析配置文件
2.读取并解析映射信息,创建SessionFactory
3.打开Sesssion
4.创建事务Transation
5.持久化操作
6.提交事务
7.关闭Session
8.关闭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,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰
7.Hibernate中数据表映射关系主要有什么类型?
one-to-many
inverse:主控方,外键的关系有谁控制
inverse=false 是主控方,外键是由它控制的
inverse=true 是被控方,外键与它没关系
要想实现主控方的控制必须将被控方作为主控方的属性
cascade:级联
主表增从表增
主表修从表修
主表删从表删
lazy:延迟
lazy=false:一下将所有的内容取出,不延时(常用)
lazy=true:取出部分内容,其余内容动态去取
通过get可以取出对方的所有内容
8.Hibernate对象的三种状态是什么?
瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。
瞬时态
由new命令开辟内存空间的java对象,
eg. Person person = new Person(”amigo”, “女”);
如果没有变量对该对象进行引用,它将被java虚拟机回收。
瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或 saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。
持久态
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。
当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下。
持久对象具有如下特点:
1. 和session实例关联;
2. 在数据库中有与之关联的记录。
脱管态
当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象。当脱管对象被重新关联到session上时,并再次转变成持久对象。
脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象。
脱管对象具有如下特点:
1. 本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;
2. 比瞬时对象多了一个数据库记录标识值。
hibernate的核心类是什么,它们的相互关系是什么?重要的方法是什么?
Configuration
SessionFactory
Session如下方法
Save
load
Update
Delete
Query q=CreateQuery(“from Customer where customerName=:customerName”)
beginTransaction
close
Transaction
Commit()
10.在数据库中条件查询速度很慢的时候,如何优化?
1.建索引
2.减少表之间的关联
3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面
4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据
11.优化hibernate性能的几点建议
1、针对oracle数据库而言,Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数,一般设置为30、50、100。Oracle数据库的JDBC驱动默认的Fetch Size=15,设置Fetch Size设置为:30、50,性能会有明显提升,如果继续增大,超出100,性能提升不明显,反而会消耗内存。
即在hibernate配制文件中进行配制:
1 <property name=”hibernateProperties”>
2 <props>
3 <prop key=”hibernate.dialect”>org.hibernate.dialect.Oracle9Dialect</prop>
4 <prop key=”hibernate.show_sql”>false</prop>
5 <!– Create/update the database tables automatically when the JVM starts up
6 <prop key=”hibernate.hbm2ddl.auto”>update</prop> –>
7 <!– Turn batching off for better error messages under PostgreSQL
8 <prop key=”hibernate.jdbc.batch_size”>100</prop> –>
9 <prop key=”hibernate.jdbc.batch_size”>50</prop>
10 </props>
11 </property>Fetch Size设的越大,读数据库的次数越少,速度越快;Fetch Size越小,读数据库的次数越多,速度越慢。
2、如果是超大的系统,建议生成htm文件。加快页面提升速度。
3、不要把所有的责任推在hibernate上,对代码进行重构,减少对数据库的操作,尽量避免在数据库查询时使用in操作,以及避免递归查询操作,代码质量、系统设计的合理性决定系统性能的高低。
4、 对大数据量查询时,慎用list()或者iterator()返回查询结果,
(1). 使用List()返回结果时,Hibernate会所有查询结果初始化为持久化对象,结果集较大时,会占用很多的处理时间。
(2). 而使用iterator()返回结果时,在每次调用iterator.next()返回对象并使用对象时,Hibernate才调用查询将对应的对象初始化,对于大数据量时,每调用一次查询都会花费较多的时间。当结果集较大,但是含有较大量相同的数据,或者结果集不是全部都会使用时,使用 iterator()才有优势。
5、在一对多、多对一的关系中,使用延迟加载机制,会使不少的对象在使用时方会初始化,这样可使得节省内存空间以及减少数据库的负荷,而且若PO中的集合没有被使用时,就可减少互数据库的交互从而减少处理时间。
6、对含有关联的PO(持久化对象)时,若default-cascade=”all”或者 “save-update”,新增PO时,请注意对PO中的集合的赋值操作,因为有可能使得多执行一次update操作。
7、 对于大数据量新增、修改、删除操作或者是对大数据量的查询,与数据库的交互次数是决定处理时间的最重要因素,减少交互的次数是提升效率的最好途径,所以在开发过程中,请将show_sql设置为true,深入了解Hibernate的处理过程,尝试不同的方式,可以使得效率提升。尽可能对每个页面的显示,对数据库的操作减少到100—-150条以内。越少越好。
12.JDBC,Hibernate 分页怎样实现?
1) Hibernate 的分页:
Query query = session.createQuery(”from Student”);
query.setFirstResult(firstResult);//设置每页开始的记录号
query.setMaxResults(resultNumber);//设置每页显示的记录数
Collection students = query.list();
2) JDBC 的分页:根据不同的数据库采用不同的sql 分页语句
例如: Oracle 中的sql 语句为: “SELECT * FROM (SELECT a.*, rownum r FROM
TB_STUDENT) WHERE r between 2 and 10″ 查询从记录号2 到记录号10 之间的
所有记录
13.说下Hibernate的缓存机制
1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存
2. 二级缓存:
a) 应用及缓存
b) 分布式缓存
条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据
c) 第三方缓存的实现
分享到:
相关推荐
.net面试题,PHP面试题,数据库面试题,英语面试,外企面试,软件测试面试题,Python面试题,Oracle面试题,MySql面试题,Web开发面试题,Unix面试题,程序员面试,网络技术面试题,网络安全面试题,Linux面试题,Hibernate面试题,...
### Struts + Spring + Hibernate 面试题解析 #### 1. AOP 和 IOC 的概念以及在 Spring 中的应用 **AOP(Aspect Oriented Programming,面向切面编程)**: 是一种编程思想,它允许程序员定义“切面”来封装那些...
Struts、Spring和Hibernate是Java Web开发中...以上是对Struts、Spring和Hibernate相关面试题的详细解答,涵盖了它们的主要概念、功能和使用方法。在实际项目中,这三大框架的集成使用能极大地提高开发效率和代码质量。
**J2EE面试题收集(三大框架)** 在Java企业级开发中,三大框架——Struts、Hibernate和Spring——占据着核心地位。这些框架分别解决了Web应用中的展示层、持久层和业务逻辑层的问题,形成了高效且易于维护的开发模式...
Java作为一门广泛应用于企业级开发的编程语言,其面试题涵盖了多方面的知识,包括但不限于基础知识、数据结构与算法、并发编程、JVM内存管理、框架原理等。这份"详细整理Java面试题,面试题及完整答案.zip"压缩包...
【Java程序员面试题收集】 Java面试题主要涵盖了基础类、应用类和其他类的知识点,旨在测试面试者的Java语言掌握程度和实际应用能力。以下是一些关键知识点的详细说明: 1. **Java基础知识** - Java的基本数据...
例如,微软的面试题可能包括算法设计、复杂度分析等,这些都需要扎实的计算机科学基础。 ### 第三章 Java篇 1. **Java基础概念**:涵盖Java语言特性,如面向对象、封装、继承、多态、异常处理、内存管理等。理解...
理解JDBC和ORM框架(如Hibernate、MyBatis)的使用。 12. **网络协议**:TCP/IP协议基础,HTTP协议的工作原理,理解Socket编程。 13. **算法与数据结构**:虽然Java面试不一定直接考察算法实现,但良好的算法基础...
### Java高级工程师常见面试题详解 #### 一、Tomcat,Apache,JBoss的区别 - **Apache**: 是一款广泛使用的HTTP服务器,主要用于处理静态HTML文件。它可以高效地处理大量并发连接,但本身并不支持Java Servlet或...
10. **框架**:如Spring、MyBatis、Hibernate等常用Java开发框架的基本原理和使用。 面试过程中,面试官还会关注应聘者对Java最新特性的了解,例如Java 8的新特性(Lambda表达式、Stream API、Optional类)以及Java...
这份"JAVA面试题集"正是为此目的而准备的,它收集了来自各大公司的面试题及对应答案,帮助求职者在面试中表现出色。 面试题集通常涵盖了以下几个方面: 1. **基础知识**:这部分可能包括Java语言的基本语法,如...
Java面试题涵盖了许多核心知识点,包括对框架的理解、框架带来的益处、自定义框架的设计原则以及使用特定框架如Struts进行开发的流程。以下是对这些知识点的详细解释: 1. **框架的理解**: 框架在软件工程中扮演...
3. **内存管理**:Java的内存管理主要通过垃圾收集机制实现,面试中可能会讨论内存的分配、对象的生命周期、垃圾回收算法(如标记-清除、复制、标记-整理、分代收集)及其优缺点。 4. **多线程**:Java提供了丰富的...
Java软件工程师面试题是评估求职者技术水平和项目经验的重要方式,尤其在神州数码、用友、东软等知名IT企业中,对Java技术的掌握程度是面试官关注的重点。以下是一些基于Java语言和技术栈的常见面试知识点: 1. **...
这可能是对2018年主流Java面试题的汇总,包括JVM内存模型、垃圾收集机制、类加载过程、设计模式等热门话题。 6. **教你如何迅速秒杀掉:99%的海量数据处理面试题**: - **大数据处理**:Hadoop、Spark、Hive等...
"2021年Java大厂面试题整理大全"是一个集合了众多Java专业面试问题的资源,旨在帮助求职者准备Java相关的职位面试。这个压缩包可能包含了大量的面试题目、解答以及一些关键知识点的总结,涵盖从基础到高级的各个方面...
8. **框架知识**:对于Spring、MyBatis、Hibernate等常用框架的理解和使用,包括依赖注入、事务管理、AOP等。 9. **数据库**:掌握SQL语言,理解关系型数据库的基本概念,如ACID特性,了解数据库索引、事务、锁机制...
Java开发面试题是Java程序员在求职过程中经常遇到的挑战,涵盖了广泛的Java EE(企业级应用)领域的知识。这里,我们将深入探讨一些常见的Java面试题及其背后的原理,帮助你准备面试。 1. **Java基础** - **数据...
通过阅读《Java面试题1.doc》到《Java面试题5.doc》这五个文档,你可以深入学习和复习这些知识点,为面试做好充分准备。每个文档都可能包含了详细的解答和解析,帮助你理解和巩固这些重要的Java知识。
Java面试题涵盖了许多核心知识点,包括基础技术、项目经验、逻辑推理和SQL查询。下面将对这些方面进行详细的解析。 1. **基础技术题** - **UML图**:UML(统一建模语言)有多种图表,包括类图、对象图、用例图、...