



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、hibernate是什么?hibernate 是基于ORM对象关系映射(完成对象数据到关系数据映射的机制)实现的,做数据持久化的工具HttpSession 与Hibernate中 Session的区别1. javax.servlet.http.HttpSession是一个抽象接口用途 :存放这个用户的一些经常被用到的信息2. 它是 hibernate 操作数据库的一个句柄对象,例如 :用户名 ,权限等手动或者通过业务层获取0. Hibernate介绍Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC 进行了非常轻量级的对象封装,使得Java 程序员可以随心所欲的使用对象编程思
2、维来操纵数据库。Hibernate 可以应用在任何使用JDBC 的场合,既可以在Java 的客户端程序使用,也可以在Servlet/JSP 的 Web 应用中使用,最具革命意义的是,Hibernate 可以在应用EJB 的 J2EE 架构中取代CMP ,完成数据持久化的重任。1.Hibernate 有哪几种查询数据的方式(1)导航对象图查询(2)OID 查询(3)HQL(4)QBC(5)本地SQL2.load() 和 get()的区别load 加载方法:Users user = (Users)session.load(Users.class, userId);get 加载方法:Users us
3、er = (Users)session.get(Users.class, userId);两加载方法区别:区别 1:如果数据库中,没有userId 的对象。如果通过get 方法加载,则返回的是一个null ;如果通过load 加载,则返回一 个 代 理 对 象 , 如 果 后 面 代 码 如 果 调 用user 对 象 的 某 个 属 性 ( 比 如user.getPassword() ) 会 抛 出 异 常 :org.hibernate.ObjectNotFoundException ;区别 2: load 支持延迟加载,get 不支持延迟加载。也就是说: Users user = (Use
4、rs)session.load(Users.class, userId);这句代码不会去执行数据库查询,只有用到user 时才会去执行数据库查询。而: Users user = (Users)session.get(Users.class, userId);则立即去执行数据库查询。所以 Users user = (Users)session.load(Users.class, userId);不会执行任何sql。注意:Users user = (Users)session.load(Users.class, userId);System.out.println(user.getId();上面这
5、 2 句代码,不会去执行数据库操作。因为load 后会在 hibernate 的一级缓存里存放一个map 对象,该 map 的 key 就是 userId 的值,但是当你getId() 时,它会去一级缓存里拿map 的 key 值,而不去执行数据库查询。所以不会报任何错。不会执行任何数据库操作。2.1 请解释 Session的load() :现在sessionload 方法和 get 方法的不同;以及Query 的 list 和 iterator 方法的不同缓存中寻找,如果找到了返回该对象,如果没找到,程序会新建一个对象,并且返回,存在session中,不会在数据库中查找,在程序中如果没有用到
6、这个实体类,可以节省一次数据库连接。如果在程序中用到了这个实体类,这个实体类就会在数据库去查找,如果没有查找到就会抛异常。 (延时加载)get():在缓存在查找,如果找到该对象,返回该对象。如果没找到,会到数据库中查找,如果数据库中有则返回该对象,如果没找到这返回空。 (立即加载)3. Hibernate 工作原理及为什么要用?原理:1. 读取并解析配置文件2. 读取并解析映射信息,创建SessionFactory3. 打开 Sesssion4. 创建事务 Transation5. 持久化操作6. 提交事务7. 关闭 Session8. 关闭 SesstionFactory为什么要用:1. 对
7、 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate 是一个基于JDBC 的主流持久化框架,是一个优秀的ORM 实现。他很大程度的简化DAO 层的编码工作3. hibernate 使用 Java 反射机制,而不是字节码增强程序来实现透明性。4. hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。4 Hibernate 是如何延迟加载?1. Hibernate2 延迟加载实现: a)实体对象 b)集合( Collection )2. Hibernate3 提供了属性的延
8、迟加载功能当 Hibernate 在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。5.0 Hibernate 中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,在一起,它们通过配置文件中的many-to-one 、one-to-many 、 many-to-many 、我们程序中把所有的表与类都映射5 说下 Hibernate 的缓存机制1. 内部缓存存在 Hibernate 中又叫一级缓存,属于应用事物级缓存
9、2. 二级缓存:a) 应用及缓存b) 分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据c) 第三方缓存的实现6 Hibernate 的查询方式Sql、Criteria,object comptositionHql :1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数7 如何优化Hibernate ?1. 使用双向一对多关联,不使用单向一对多2. 灵活使用单向一对多关联3. 不用一对一,用多对一取代4. 配置对象缓存,不使用集合缓存5. 一对多集合使用 Bag,多对多集合使用 Set6. 继承类使用显
10、式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰8. hibernate 的三种状态之间如何转换当对象由瞬变状态(Transient)一 save()时,就变成了持久化状态。当我们在Session 里存储对象的时候,实际是在Session 的 Map 里存了一份,也就是它的缓存里放了一份,然后,又到数据库里存了一份,在缓存里这一份叫持久对象(Persistent)。Session 一 Close() 了,它的缓存也都关闭了,整个Session 也就失效了,这个时候,这个对象变成了游离状态(Detached),但数据库中还是存在的。当游离状态 (Detached)update()时,又变为
11、了持久状态(Persistent)。当持久状态 (Persistent)delete()时,又变为了瞬时状态 (Transient), 此时,数据库中没有与之对应的记录。8.请解释说明Hibernate 控制下的POJO 会呈现三种状态,分别是transient、persistenet 和Transient:瞬变状态:数据库中没数据。跟session不相关。没存过。Persistenet:游离态:在数据库中有记录,但是在session中没有。需要手工同步。detached,请解释这三种状态Detached:持久态:数据库中有记录,session 中也有这记录。自动更新9. update()和s
12、aveOrUpdate ()的区别?update()和 saveOrUpdate()是用来对跨Session 的update()方法操作的对象必须是持久化了的对象。PO 进行状态管理的。也就是说, 如果此对象在数据库中不存在的话,就不能使用update()方法。saveOrUpdate() 方法操作的对象既可以使持久化了的,也可以使没有持久化的对象。如果是持久化了的对象调用saveOrUpdate()则会更新数据库中的对象;如果是未持久化的对象使用此方法,则 save 到数据库中10. hibernate 中一对多配置文件返回的是什么?hibernate 中一对多配置文件会相应的映射为两张表,
13、并且它们之间的关系是一对多的。例如:一个student 和 classes表的关系。一个学生只能是一个班的,一个班可以有多个学生。11. Hibernate与 spring 的联系hibernate 中的一些对象可以给HibernateTemplate 等。Spring来管理 ,让Spring容器来创建hibernate中一些对象实例化。例如:SessionFactory,Hibernate 本来是对数据库的一些操作,放在的将 Hibernate 的操作也加入到事务中来了。DAO层 ,而Spring给业务层的方法定义了事务,业务层调用DAO层的方法,很好12. Hibernate 自带的分页机
14、制是什么?如果不使用Hibernate 自带的分页,则采用什么方式分页?1、 hibernate 自带的分页机制:获得 Session 对象后,从 Session 中获得 Query 对象。用 Query.setFirstResult() :设置要显示的第一行数据 , Query.setMaxResults() :设置要显示的最后一行数据。2、不使用hibernate 自带的分页 ,可采用 sql 语句分页,如: 5:为每页显示的记录,2 为当前页:select * top 5 from table where tabId not in (select tabId top (2-1)*5 fr
15、om table);13.什么是 Hibernate 的并发机制?怎么去处理并发问题?Hibernate并发机制:a、Hibernate的Session 对象是非线程安全的,对于单个请求,单个会话,单个的工作单元(即单个事务,单个线程),它通常只使用一次 ,然后就丢弃。如果一个Session实例允许共享的话,那些支持并发运行的,例如Http request,session beans将会导致出现资源争用。如果在 Http Session 中有 hibernate 的 Session 的话 ,就可能会出现同步访问Http Session。只要用户足够快的点击浏览器的“刷新”,就会导致两个并发运行
16、的线程使用同一个Session。b、多个事务并发访问同一块资源,可能会引发第一类丢失更新,脏读, 幻读, 不可重复读, 第二类丢失更新一系列的问题。解决方案 :设置事务隔离级别。Serializable:串行化。隔离级别最高Repeatable Read:可重复读Read Committed :已提交数据读Read Uncommitted :未提交数据读。隔离级别最差设置锁:乐观锁和悲观锁。乐观锁:使用版本号或时间戳来检测更新丢失,在的映射中设置 optimistic- lock= ”all可”以在没有版本或者时间戳属性映射的情况下实现 版本检查,此时Hibernate将比较一行记录的每个字段
17、的状态行级悲观锁: Hibernate 总是使用数据库的锁定机制, 从不在内存中锁定对象!只要为JDBC 连接指定一下隔 离级别,然后让数据库去搞定一切就够了。类 LockMode定义了 Hibernate 所需的不同的锁定级别:LockMode.UPGRADE,LockMode.UPGRADE_NOWAIT,LockMode.READ;14. Hibernate 与 jdbc 的联系hibernate 是 jdbc 的轻量级封装, 包括 jdbc 的与数据库的连接 (用 perty 的配置文件实现当然本质是封装了jdbc的 forname ),和查询,删除等代码,都
18、用面向对象的思想用代码联系起来,hibernate 通过 hbm 配置文件把po 类的字段和数据库的字段关联起来比如数据库的id, 在 po 类中就是pravite Long id; public Long getId() ;public setId(Long id);然后 hql 语句也是面向对象的, 它的查询语句不是查询数据库而是查询类的,这些实现的魔法就是xml 文件,其实 hibernate=封装的 jdbc+xml 文件15. hibernate 拒绝连接、服务器崩溃的原因?最少写5 个1. db 没有打开2. 网络连接可能出了问题3. 连接配置错了4. 驱动的 driver , u
19、rl 是否都写对了5. LIB 下加入相应驱动,数据连接代码是否有误6. 数据库配置可能有问题7. 当前联接太多了,服务器都有访问人数限制的8. 服务器的相应端口没有开,即它不提供相应的服务9 hibernate 有哪些缓存,分别怎么使用?10 你对 hibernate 的了解到了一个什么样的程度?11 写出一个 sql 语句体现 hibernate 中一对多的关系16.hibernate.cfg.xml 文件的作用该配置文件主要用来描述数据库连接的相关信息, 以及该应用中关心映射文件所在的位置,和一些其他的设置,该文件一般放在项目的根目录下。17.hibernate 中的继承关系按照数据库的
20、表结构来分的话有那几种?1.所有类在一张表中,通过添加一个鉴别字段来区分子类。2.每个子类一张表,父类的字段被分配到每个表中。3.每个类一张表,包括父类和子类,通过父类和子类的ID 来体现继承关系18.hibernate 中常见的关联关系有那3 种?那种事最常见的一对一一对多多对多一对多最常见19.hibernate 中的 cascade属性的作用 :级联操作20.hql 中能否使用max(),sum(),sount() 等组函数?能21.hql 中能否使用Group by?能22.hql 中加 select和不加 select的区别不加 select 会根据用户所提供的条件查询数据,并打成所
21、映射的对象加了 select 则不会23.Hql 中 query.uniqueResult() 和 query.list()的区别?前者指返回一个对象,后者返回一个list 集合24.简述一下 qbcqbc(query by criteria) 这种 ape 封装了 sql 语句的动态拼接,对查询提供了更加面向对象的功能接口25.请解释为什么 SessionFactory一般以单例方式使用SessionFactory 是一个大型对象,而且线程安全。在一个程序中只需要一个26.请解释说明 hibernate 配置文件中 dialect 属性的确切含义数据库方言:多种数据库拥有不同的语言语法,通过
22、设置dialect 指定所用的数据库,并生成对应语法和语言的sql 语句。27.请解释 Hibernate3.2主键的生成方式中, native和 identity 方式的区别 。Native 主键生成方式会根据不同的底层数据库自动选择Identity 、 Sequence、 Hilo 主键生成方式Identity 当时根据底层数据库,来支持自动增长,不同的数据库用不同的主键增长方式28.请简要的描述一下使用Hibernate 进行大批量更新的经验直接使用 hibernate API进行批量更新和批量删除都不推荐, 而直接通过 JDBC API 执行相关的 SQl 语句或调用相关的存储过程是最
23、佳的方式。29.请简要的描述一下使用Hibernate 二级高速缓存的经验1 Hibernate3 的二级缓存和 session 级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存;二级缓存的生命周期和 sessionFactory 的生命周期是一样的, sessionFactory 可以管理二级缓存;2 sessionFactory 级别的缓存,需要手动配置;所有的session 可以共享 sessionFactory 级别的缓存;(一般把一些不经常变化的实体对象放到 sessionFactory 级别的缓存中,适合放不经常变化的实体对象。)3 Hiberante3 二级缓存的配置
24、和使用方法如下:必须把 ehcache.jar 包导入,然后到Hibernate3.2 的 etc 文件下把 ehcache.xml 复制到工程 src 目录下( ehcache.xml 里边的参数里边有详细英文说明) ;说明: ehcache.jar 是第三方法的缓存产品, hiberante 只是把它做了集成,还有好多第三方hibernate 集成的缓存产品,相关说明请查阅hiberante3 开发手册; ehcache 是不支持分布应用的,如果有分布式需求,请换成支持分布式的二级缓存产品,hiberate3 开发手册都有相头说明。配置方法都类似);4 Hibernate3 的二级缓存默认
25、是开起的,也可以指定开起。30.Hibernate 的延迟加载怎么看?当 Hibernate 查询数据的时候,数据并没有存在于内存中,当数据真正对数据操作时,才存在于内存中,就实现了延迟加载,他节省了服务器内存的开销,从而提升了服务器的性能。31.hibernate 的 sessionFactory说说是管理 session 的一个工厂,由sessionFactory 的相关方法返回session 对象,而不是平常的另一个好处就是,你只管要session而不用管它是如何产生的。这样在效率和安全性是比较好的。new 关键字创建session,它的32.什么事O/RM?对象关心映射是一种为了解决面
26、向对象与关心数据库互不匹配的技术。简单的说, orm 是通过使用描述对象和数据库之间映射的元数据,将 java 程序中的对象自动持久化到关系数据库中,本质上就是将数据从一种形式转换到另一种形式。33.在 o/rm 中 java 中的类名,属性,对象分别转换为数据库中的什么?类名 -表名属性 -字段对象 -记录=Hibernate笔试题 =(1)一般情况下,关系数据模型与对象模型之间有哪些匹配关系(多选)ABCA) 表对应类B)记录对应对象C)表的字段对应类的属性D)表之间的参考关系对应类之间的依赖关系(2)以下关于SessionFactory 的说法哪些正确?(多选)BCA) 对于每个数据库事
27、务,应该创建一个SessionFactory 对象B)一个 SessionFactory 对象对应一个数据库存储源。C)SessionFactory 是重量级的对象,不应该随意创建。如果系统中只有一个数据库存储源,只需要创建一个。 D)SessionFactory 的 load() 方法用于加载持久化对象(3)Customer映射 orders类中有一个属性? ASet 类型的orders 属性,用来存放Order订单对象,在Customer.hbm.xml文件中,用哪个元素A)<set> B)<one-to-many> C)<many-to-one> D)
28、<property>(4)<set>元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值?(单选)DA)noneB)saveC)deleteD)save-update(5)以下哪些属于Session的方法? ABCDFA)load()B)save()C)delete()D)update()E)open()F)close()(6)以下程序的打印结果是什么?(单选)Ctx = session.beginTransaction();Customer c1=(Customer)session.load(Customer.
29、class,new Long(1);Customer c2=(Customer)session.load(Customer.class,new Long(1);System.out.println(c1=c2);mit();session.close();A) 运行出错,抛出异常B)打印 falseC)打印 true(7)以下程序代码对Customer 的 name 属性修改了两次:Btx = session.beginTransaction();Customer customer=(Customer)session.load(Customer.class,new Long(1);custom
30、er.setName("Jack");customer.setName("Mike");mit();执行以上程序,Hibernate 需要向数据库提交几条update 语句?(单选)A)0 B)1 C)2 D)3(8)在持久化层,对象分为哪些状态?(多选)ACDA) 临时状态B)独立状态C)游离状态D)持久化状态(9)对于以下程序,Customer 对象在第几行变为持久化状态?(单选)DCustomer customer=new Customer(); /line1customer.setName("Tom"); /line2Session session1=sessionFactory.openSession(); /line3Transaction tx1 = session1.beginTransaction(); /line4session1.save(customer); /line4mit(); /line5session1.close(); /line6A)li
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国高压直流输电系统行业供需态势分析及投资机会分析报告
- 2025至2030年中国食品饮料金属包装涂料行业市场发展前景及投资风险评估报告
- 2025至2030年中国预制混凝土桩行业市场运行态势及未来趋势预测报告
- 2025至2030年中国铁路装备制造行业全景调研及竞争格局预测报告
- 2025至2030年中国金属接骨板行业市场发展调研及投资方向分析报告
- 2025至2030年中国透明PVC行业市场运营态势及投资战略规划报告
- 2025至2030年中国轻质碳酸镁行业投资战略分析及发展前景研究报告
- 2025至2030年中国谷维素原料药行业市场行情动态及发展趋向分析报告
- 清廉之风面试题及答案
- 场地策划面试题及答案
- 【MOOC】线性代数及其应用-天津大学 中国大学慕课MOOC答案
- 酒店餐饮设备电路布线合同
- 12岁体适能课程设计
- 国开2024年秋《学前儿童艺术教育音乐》终结性考核答案
- 外贸英语函电教程 第二版 课件Unit 1 Establishing Business Relations;Unit 2 Inquiries and Offers
- 供应柴油月结算合同范本
- 2024年中考语文试题分类汇编:字音字形(解析版全国)
- GB/T 30893-2024雨生红球藻粉
- 2024年《风力发电原理》基础技能及理论知识考试题库与答案
- 2024秋国家开放大学《外国文学》形考任务1-4答案
- 机械原理课程设计20篇
评论
0/150
提交评论