1.Hibernate有哪几种查询数据的方式
(1)导航对象图查询
(2)OID查询
(3)HQL
(4)QBC
(5)本地SQL
2.load()和get()的区别
load加载方法:
Java代码
Users user = (Users)session.load(Users.class, userId);
get加载方法:
Java代码
Users user = (Users)session.get(Users.class, userId);
两加载方法区别:
区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个null;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如user.getPassword())会抛出异常:org.hibernate.ObjectNotFoundException;
区别2:load支持延迟加载,get不支持延迟加载。
也就是说:
Java代码
Users user = (Users)session.load(Users.class, userId);
这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询。
而:
Java代码
Users user = (Users)session.get(Users.class, userId);
则立即去执行数据库查询。 所以Users user = (Users)session.load(Users.class, userId);不会执行任何sql。
注意:
Java代码
Users user = (Users)session.load(Users.class, userId);
System.out.println(user.getId());
上面这2句代码,不会去执行数据库操作。因为load后会在hibernate的一级缓存里存放一个map对象,该map的key就是userId的值,但是当你getId()时,它会去一级缓存里拿map的key值,而不去执行数据库查询。所以不会报任何错。不会执行任何数据库操作。
3. 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的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
4. Hibernate是如何延迟加载?
1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)
2. Hibernate3 提供了属性的延迟加载功能
当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
5. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)
类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、
5. 说下Hibernate的缓存机制
1. 内存缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存
2. 二级缓存:
a) 应用及缓存
b) 分布式缓存
条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据
c) 第三方缓存的实现
6. Hibernate的查询方式
Sql、Criteria,object comptosition
Hql:
1、 属性查询
2、 参数查询、命名参数查询
3、 关联查询
4、 分页查询
5、 统计函数
7. 如何优化Hibernate?
1. 使用双向一对多关联,不使用单向一对多
2. 灵活使用单向一对多关联
3. 不用一对一,用多对一取代
4. 配置对象缓存,不使用集合缓存
5. 一对多集合使用Bag,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰
=====================Hibernate笔试题==========================
(1)一般情况下,关系数据模型与对象模型之间有哪些匹配关系(多选)
A)表对应类
B)记录对应对象
C)表的字段对应类的属性
D)表之间的参考关系对应类之间的依赖关系
(2)以下关于SessionFactory的说法哪些正确?(多选)
A)对于每个数据库事务,应该创建一个SessionFactory对象
B)一个SessionFactory对象对应一个数据库存储源。
C)SessionFactory是重量级的对象,不应该随意创建。如果系统中只有一个数据库存储源,只需要创建一个。
D)SessionFactory的load()方法用于加载持久化对象
(3)Customer类中有一个Set类型的orders属性,用来存放Order订单对象,在Customer.hbm.xml文件中,用哪个元素映射orders属性?
A)<set> B)<one-to-many> C)<many-to-one> D)<property>
(4)<set>元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值?(单选)
A)none
B)save
C)delete
D)save-update
(5)以下哪些属于Session的方法?
A)load()
B)save()
C)delete()
D)update()
E)open()
F)close()
(6)以下程序的打印结果是什么?(单选)
tx = session.beginTransaction();
Customer c1=(Customer)session.load(Customer.class,new Long(1));
Customer c2=(Customer)session.load(Customer.class,new Long(1));
System.out.println(c1==c2);
tx.commit();
session.close();
A)运行出错,抛出异常
B)打印false
C)打印true
(7)以下程序代码对Customer的name属性修改了两次:
tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,
new Long(1));
customer.setName(\"Jack\");
customer.setName(\"Mike\");
tx.commit();
执行以上程序,Hibernate需要向数据库提交几条update语句?(单选)
A)0 B)1 C)2 D)3
(8)在持久化层,对象分为哪些状态?(多选)
A)临时状态
B)独立状态
C)游离状态
D)持久化状态
(9)对于以下程序,Customer对象在第几行变为持久化状态?(单选)
Customer customer=new Customer(); //line1
customer.setName(\"Tom\"); //line2
Session session1=sessionFactory.openSession(); //line3
Transaction tx1 = session1.beginTransaction(); //line4
session1.save(customer); //line4
tx1.commit(); //line5
session1.close(); //line6
A) line1 B)line2 C)line3 D)line4 E)line5 F)line6
(10)对于以下程序,Customer对象在第几行变为游离状态?(单选)
Customer customer=new Customer(); //line1
customer.setName(\"Tom\"); //line2
Session session1=sessionFactory.openSession(); //line3
Transaction tx1 = session1.beginTransaction(); //line4
session1.save(customer); //line4
tx1.commit(); //line5
session1.close(); //line6
A) line1 B)line2 C)line3 D)line4 E)line5 F)line6
(11)以下哪一种检索策略利用了外连结查询?(单选)
A)立即检索 B)延迟检索 C)迫切左外连结检索
(12)假设对Customer类的orders集合采用延迟检索策略,编译或运行以下程序,会出现什么情况(单选)
Session session=sessionFactory.openSession();
tx = session.beginTransaction();
Customer customer=(Customer)session.get(Customer.class,new Long(1));
tx.commit();
session.close();
Iterator orderIterator=customer.getOrders().iterator();
A)编译出错 B)编译通过,并正常运行 C)编译通过,但运行时抛出异常
(13)关于HQL与SQL,以下哪些说法正确?(多选)
A)HQL与SQL没什么差别
B)HQL面向对象,而SQL操纵关系数据库
C)在HQL与SQL中,都包含select,insert,update,delete语句
D)HQL仅用于查询数据,不支持insert,update和delete语句
(14)事务隔离级别是由谁实现的?(单选)
A)Java应用程序 B)Hibernate C)数据库系统 D)JDBC驱动程序
(15)悲观锁与乐观锁,哪个具有较好的并发性能?(单选)
A)悲观锁 B)乐观锁
答案:
(1)A,B,C (2)B,C (3)A (4)D (5)A,B,C,D,F (6)C (7)B (8)A,C,D (9)D (10)F (11)C (12)C (13)B,D (14)C (15)B
- 浏览: 791950 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (981)
- javascript (102)
- java (212)
- JQuery (81)
- 幽默笑话 (2)
- 只言片语 (6)
- 开发小记 (283)
- Hibernate (17)
- DWR (4)
- SQL (10)
- spring-ibatis (8)
- linux (24)
- Struts1 (8)
- Struts2 (16)
- spring (42)
- Mybatis (16)
- css (18)
- servlet (8)
- jdbc (4)
- jsp (1)
- spring-jdbc (2)
- FreeMarker (2)
- MySQL (24)
- JQuery-Grid (7)
- jstl (5)
- 正则表达式 (1)
- 面试集锦 (86)
- unix (18)
- 开发工具 (23)
- ajax (5)
- webservice (4)
- log4j (3)
- oracle (15)
- extjs (14)
- 其他 (9)
- 优秀技术参考地址 (1)
- 性能 (3)
- 数据库 (25)
- 算法 (15)
- 设计模式 (10)
- Python (3)
- AIX (5)
- weblogic (1)
- shell (14)
- quartz (5)
- 图形文件FusionCharts (1)
- Websphere (4)
- 转载 (5)
- hadoop (1)
- highchart (24)
- perl (22)
- DB2 (7)
- JBoss (1)
- JQuery Easy UI (9)
- SpringMVC (5)
- ant (5)
- echart (9)
- log4J配置 (3)
- 多线程 (10)
- 系统架构 (7)
- nginx (3)
- loadrunner1 (1)
- 分布式 (1)
- Dubbo (1)
- Redis (2)
- JMS (4)
- 自动化测试 (3)
- Spring循环依赖的三种方式 (1)
- spring-boot (2)
- 高级测试 (9)
- github (2)
- sonar (1)
- docker (6)
- web前端性能优化 (1)
- spring-aop (6)
- rabbit (1)
- ELK (1)
- maven (1)
- minio (1)
最新评论
-
zengshaotao:
jstl1point0 写道很好啊,如果有带Session会话 ...
Nginx+Tomcat搭建高性能负载均衡集群 -
jstl1point0:
很好啊,如果有带Session会话的怎么搞呢
Nginx+Tomcat搭建高性能负载均衡集群
发表评论
-
MyBatis防止SQL注入
2017-11-14 13:35 990SQL注入是一种代码注入技术,用于攻击数据驱动的应 ... -
java中类的加载顺序介绍(ClassLoader)
2017-11-14 11:41 8231、ClassNotFoundExcetpion 我们在 ... -
JMS实例
2017-08-21 15:40 4831. JMS架构 Java 消息服务(Java M ... -
java中Filter、Servlet、Listener的学习
2017-03-29 21:52 4591、Filter的功能filter功能,它使用户可以改变一个 ... -
高并发,线程池
2017-03-29 21:52 11051.高并发的内容 Zookee ... -
servlet/filter/listener/interceptor区别与联系
2017-03-29 21:47 521servlet/filter/listener/interc ... -
AIX上oracle的安装二
2014-07-20 14:15 629硬盘上安装任何东西都是需要空间的,所以在系统登陆后需要建立相 ... -
AIX上oracle的安装一
2014-07-18 22:52 613因为开发环境一般都是windows,然后发布环境是unix或 ... -
前台接收后台返回流
2014-06-08 22:49 2347很多时候,我们需要前台接收后台返回的流,比如图片。 当然, ... -
log4j ,ibatis sql输出
2014-06-07 23:24 469log4j,一个很流行的日志功能,很多第三方插件都在使用, ... -
ibatis,dynamic sql
2014-06-07 23:18 462ibatis 2的主打开发,标签使用时,需要注意,比如在动 ... -
json格式依赖包
2014-06-07 22:26 753json是比较简单的数据交换格式,一般的,我们都会用到类似如 ... -
ThreadLocal
2014-06-02 13:49 636一、概述 *在Thread类当中有这么一个成员变量的 ... -
数据库的事务隔离级别
2014-05-29 11:24 585在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务 ... -
JQuery.extend()
2014-05-22 15:49 596var src1 = { name:"tom&q ... -
归集数组数据,求数组数据加和为固定值
2014-05-22 14:45 931package web; import java.u ... -
javascript 两个括号
2014-05-21 16:14 777//这里只是相当于进行了匿名函数的定义,后面的括号不能进行 ... -
只在synchronized块里同步
2014-05-20 21:57 652package thread; /** * 线程在执行同步 ... -
如何才能做到网站高并发访问
2014-05-20 17:01 580http://oldboy.blog.51cto.com/2 ... -
MyBatis+Spring基于接口编程的原理分析(Mapper)
2014-05-20 16:57 3265package org.denger.mapper; ...
相关推荐
**标题:Hibernate经典例子全** **内容:** Hibernate是一款强大的Java持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而无需过多关注底层的SQL语句。本资源包含了一系列的Hibernate实例,旨在...
"hibernate经典技术PPT"这一标题表明了资源的主要内容是关于Hibernate技术的,而“经典”一词暗示这是一份较为成熟和权威的教程资料,可能涵盖了Hibernate的核心技术和常见应用。 描述中的"经典heibernate教程,从...
在这个“Spring+Struts+Hibernate经典注册”项目中,我们将深入探讨这三个框架如何协同工作,实现一个完整的用户注册功能。 Spring框架是Java企业级应用的核心,它提供了依赖注入(DI)和面向切面编程(AOP)等核心...
1. Hibernate概述:了解ORM的概念,以及Hibernate如何解决传统JDBC编程中的问题。 2. 安装与配置:设置开发环境,包括下载Hibernate库,配置Hibernate的配置文件(hibernate.cfg.xml)。 3. 实体类与表映射:学习...
《经典Hibernate教程_从入门到精通》第一篇主要介绍了ORM概述和Hibernate的作用,以及Hibernate应用程序的基本结构和JDBC与Hibernate的对比。以下是详细的知识点解析: 1. **ORM概述** - ORM(Object-Relational ...
【Hibernate 概述】 Hibernate 是一个流行的 ...面试时,除了了解 Hibernate 的基本概念和特点,面试官更希望听到你在实际项目中如何运用 Hibernate,以及遇到的问题和解决方案,体现出你的实践经验和问题解决能力。
这本“Struts Spring Hibernate经典书籍”涵盖了这三个框架的重要概念、用法以及最佳实践,旨在帮助开发者深入理解并熟练运用它们。 Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它使得...
8. 性能优化:分析和解决Hibernate性能问题,如缓存策略、批处理、连接池配置等,提升应用的运行效率。 9. 高级特性:探讨Hibernate的高级功能,如关联映射、集合映射、继承映射、多态查询、懒加载和代理对象等。 ...
这个经典课件针对想要深入理解和掌握Hibernate框架的初学者和进阶者,旨在帮助他们从入门到精通。 一、Hibernate概述 Hibernate 是Java开发中最流行的ORM解决方案之一,它通过提供一套API和XML配置文件,将Java类与...
在这个"Struts+Hibernate经典的分页代码"示例中,我们可以学习如何在基于Struts的Web应用中集成Hibernate,以实现数据的分页显示。分页是用户界面设计中一个常见的需求,特别是在处理大量数据时,它能提高用户体验,...
【hibernate经典教程】 本教程详细介绍了Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate是一个开源的ORM框架,旨在简化Java开发者与关系数据库之间的交互,通过提供对象到关系数据的映射,使得开发者...
本文将基于《Java Persistence with Hibernate》这一经典著作,深入探讨Hibernate的核心概念和技术细节。 #### 书评摘要与概述 《Java Persistence with Hibernate》被誉为是Hibernate领域的权威指南。本书由项目...
【hibernate经典源码】是针对Java开发人员的一个学习资源,主要涵盖了Hibernate框架的核心功能和常见用法。Hibernate是一个开源的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来...
《Hibernate Recipes》是一本专注于Hibernate框架的应用实践和技术解析的经典书籍。本书由Srinivas Guruzu和Gary Mak合著,于2010年出版。它以问题解决为导向,为开发者提供了大量的代码示例和模板,帮助他们在实际...
最后,`Struts+Hibernate整合.txt`提到了Struts,这是一个经典的MVC框架。Struts与Hibernate结合使用,可以构建强大的企业级Web应用。通过Action和Session Façade模式,我们可以将业务逻辑和数据访问层分离,使系统...
《Hibernate in Action》是一本经典的Java持久化框架Hibernate的实战指南。源码是作者为了配合书中的理论和示例而提供的实践素材,旨在帮助读者深入理解Hibernate的工作原理和使用方式。这里我们将围绕Hibernate的...
SSH框架组合是Java Web开发的经典架构,其中Spring负责依赖注入和事务管理,Struts处理MVC模式,而Hibernate则负责数据持久化。HibernateSynchronizer3的另一个亮点是其自动生成SSH各层代码的能力。这意味着开发者只...
总结,Hibernate 3.0作为经典的ORM框架,为Java开发者提供了强大的数据库操作支持。通过对源码的学习和实际项目的应用,我们可以更深入地理解ORM思想,提升开发技能,更好地应对复杂的企业级应用需求。
SSH框架指的是Spring、Struts和Hibernate的组合,是Java Web开发中的经典三层架构模式。Spring负责管理应用的业务层,提供依赖注入和AOP(面向切面编程)等功能;Struts则作为表现层框架,处理HTTP请求和视图渲染;...
《Hibernate 3.2.2:经典持久化框架的深度解析》 Hibernate 3.2.2是一款在Java开发领域广泛使用的对象关系映射(ORM)框架,它为开发者提供了强大的数据持久化功能,极大地简化了数据库操作。尽管最新版本已经更新...