Hibernate 笔试试题及详细答案_第1页
Hibernate 笔试试题及详细答案_第2页
Hibernate 笔试试题及详细答案_第3页
Hibernate 笔试试题及详细答案_第4页
Hibernate 笔试试题及详细答案_第5页
已阅读5页,还剩6页未读, 继续免费阅读

下载本文档

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

文档简介

Hibernate笔试试题及详细答案适用场景:Java后端基础面试、框架阶段性测试、实训考核总分:100分考试时长:90分钟一、单项选择题(共15题,每题2分,共30分)1.下列关于Hibernate框架的核心作用,说法正确的是()A.负责Web层请求接收与分发B.实现Java对象与数据库表的ORM映射,简化JDBC操作C.负责项目事务管理,不操作数据库D.优化Java代码编译效率2.Hibernate的核心配置文件默认名称是()A.hibernate.xmlB.hibernate.cfg.xmlC.applicationContext.xmlD.struts.xml3.下列不属于Hibernate持久化对象状态的是()A.瞬时态(临时态)B.持久态C.游离态(脱管态)D.冻结态4.持久态对象的核心特征是()A.无OID,不与Session关联B.有OID,与Session关联,数据变动会自动同步数据库C.有OID,不与Session关联D.无OID,可直接更新数据库5.Hibernate中Session对象的特点,错误的是()A.轻量级对象,非线程安全B.是数据库操作的核心对象C.可以全局共享使用D.一级缓存默认开启6.下列关于Hibernate一级缓存的说法,正确的是()A.属于SessionFactory级别缓存,全局共享B.默认关闭,需要手动配置开启C.属于Session级别缓存,会话结束即清空D.可以缓存查询结果集7.Hibernate中save()方法和persist()方法的主要区别是()A.save()支持事务外保存,persist()必须在事务内执行B.persist()会立即返回主键ID,save()延迟返回C.save()仅能保存瞬时态对象,persist()可保存所有状态对象D.无本质区别,可随意替换8.想要查询全部数据,且使用HQL语句,下列写法正确的是()A.fromUserB.select*fromUserC.fromuserD.select*fromuser9.Hibernate中二级缓存的作用范围是()A.单个Session会话B.整个SessionFactory生命周期,全局共享C.单个事务D.单次查询操作10.下列主键生成策略中,适配MySQL自增主键的是()A.sequenceB.identityC.uuidD.assigned11.Hibernate中update()方法的作用是()A.仅更新持久态对象B.更新游离态对象,将其转为持久态C.直接执行SQL更新语句D.更新瞬时态对象12.开启Hibernate自动建表的配置参数是()A.hibernate.show_sqlB.hibernate.hbm2ddl.autoC.hibernate.format_sqlD.hibernate.dialect13.下列关于HQL和SQL的区别,说法错误的是()A.HQL面向对象,SQL面向数据库表B.HQL不区分大小写(类名、属性名除外)C.HQL可以直接执行数据库函数,SQL不可以D.HQL支持多态查询,SQL不支持14.Session的load()和get()方法的核心区别是()A.load()延迟加载,找不到数据抛异常;get()立即加载,找不到返回nullB.load()立即加载,get()延迟加载C.无区别,只是方法名不同D.get()性能更高,load()兼容性更好15.Hibernate中事务的默认隔离级别是()A.读未提交B.读已提交C.可重复读D.串行化二、填空题(共10空,每空2分,共20分)1.ORM的中文全称是__________,核心是实现__________和数据库表的映射。2.Hibernate的三大核心组件是SessionFactory、__________、__________。3.持久化对象的三种状态分别是瞬时态、__________、__________。4.Hibernate一级缓存默认开启,属于__________级别缓存;二级缓存默认关闭,属于__________级别缓存。5.HQL是__________查询语言,完全面向对象,不直接操作数据库表。6.调用Session的__________方法可以手动清空一级缓存。三、简答题(共4题,每题8分,共32分)1.简述Hibernate中瞬时态、持久态、游离态对象的区别,以及三种状态的转换方式。2.详细说明Session中get()和load()方法的异同点。3.简述Hibernate一级缓存和二级缓存的区别,以及各自的使用场景。4.简述hibernate.hbm2ddl.auto参数的常用取值及各自作用。四、代码实操题(共1题,18分)需求:使用Hibernate完成用户数据的新增与查询操作1.实体类User:包含id(主键、自增)、username(用户名)、age(年龄)、phone(手机号)2.完成实体类映射文件编写3.编写测试代码,实现新增1条用户数据,再根据ID查询该用户要求:代码规范、注释清晰、适配MySQL数据库详细参考答案一、单项选择题答案1.B解析:Hibernate是ORM持久层框架,核心是简化JDBC,实现对象与数据表映射,不负责Web层、编译优化等功能。2.B解析:Hibernate默认核心配置文件为hibernate.cfg.xml,放置在src根目录下。3.D解析:Hibernate持久化对象只有瞬时态、持久态、游离态三种状态,无冻结态。4.B解析:持久态对象必须拥有OID(主键标识)、与当前Session关联,对象属性修改后,事务提交时会自动同步到数据库。5.C解析:Session非线程安全,每个线程、每个事务都需要创建独立Session,不能全局共享。6.C解析:一级缓存是Session级别的本地缓存,默认开启,会话关闭后缓存清空,仅缓存单个对象,不缓存结果集。7.A解析:save()方法可在事务外执行,会立即生成主键;persist()必须在事务内执行,保证数据一致性,无返回值。8.A解析:HQL面向类查询,关键字不区分大小写,类名首字母大写,查询全部无需写select*。9.B解析:二级缓存是SessionFactory级全局缓存,跨Session共享,生命周期与项目一致。10.B解析:identity适配MySQL、SQLServer自增主键;sequence适配Oracle序列;uuid为UUID主键;assigned为手动赋值主键。11.B解析:update()方法用于将游离态对象重新关联Session,转为持久态,提交事务后更新数据库数据。12.B解析:hibernate.hbm2ddl.auto用于配置自动建表、更新表结构;show_sql用于打印SQL语句;format_sql用于格式化SQL;dialect用于配置数据库方言。13.C解析:HQL和SQL均支持调用数据库函数,核心区别是面向对象和面向表的差异。14.A解析:get()立即查询数据库,无数据返回null;load()采用延迟加载,返回代理对象,访问属性时才查询,无数据抛ObjectNotFoundException。15.B解析:Hibernate默认事务隔离级别为读已提交,可避免脏读,兼顾性能与数据一致性。二、填空题答案1.对象关系映射;Java实体对象2.Session;Transaction3.持久态;游离态(顺序可互换)4.Session(会话);SessionFactory(工厂)5.Hibernate6.clear()三、简答题答案1.三种对象状态区别及转换方式(1)瞬时态(临时态):对象无OID,不与任何Session关联,内存中独立存在,数据库无对应数据。(2)持久态:对象有OID,与当前Session关联,数据库存在对应数据,对象属性变更会自动同步数据库。(3)游离态(脱管态):对象有OID,数据库有对应数据,但不与当前Session关联,属性修改不会自动同步数据库。状态转换:-瞬时态→持久态:调用Session.save()、persist()方法-持久态→游离态:调用Session.close()、evict()、clear()方法-游离态→持久态:调用Session.update()、saveOrUpdate()方法-持久态/游离态→瞬时态:手动置空OID2.get()和load()方法异同点相同点:均通过主键ID查询单条数据,属于Session核心查询方法。不同点:(1)加载机制:get()是立即加载,调用方法即查询数据库;load()是延迟加载,返回代理对象,访问对象属性时才执行查询。(2)返回结果:get()查询不到数据返回null;load()查询不到数据抛出ObjectNotFoundException异常。(3)缓存使用:get()优先查询一级缓存,无则查数据库;load()优先使用缓存,最大化利用缓存性能。(4)适用场景:get()适合不确定数据是否存在的场景;load()适合确定数据一定存在,追求查询性能的场景。3.一级缓存与二级缓存区别及使用场景(1)级别与范围:一级缓存为Session级本地缓存,仅当前会话有效,默认开启;二级缓存为SessionFactory级全局缓存,跨会话共享,默认关闭,需手动配置。(2)缓存内容:一级缓存仅缓存持久化对象;二级缓存可缓存实体对象、查询结果集、集合数据。(3)生命周期:一级缓存随Session创建而创建,随Session关闭而清空;二级缓存随项目启动初始化,项目关闭后销毁。(4)使用场景:一级缓存适合同一次会话中多次查询同一数据的场景,减少重复SQL;二级缓存适合项目中高频查询、低修改的静态数据(如字典表、配置表数据)。4.hibernate.hbm2ddl.auto常用取值及作用-create:项目启动时先删除原有数据表,再重新创建全新表结构,测试环境常用,生产环境禁止使用。-create-drop:项目启动创建表,项目关闭后自动删除数据表,仅用于单元测试。-update:最常用,启动时对比实体类与数据表结构,自动更新新增字段、约束,不会删除原有数据和字段,适配开发、测试环境。-validate:启动时校验实体类与数据表结构是否一致,不一致则抛出异常,仅校验不修改表结构,适合生产环境。-none:关闭自动表结构管理,生产环境默认配置。四、代码实操题答案1.User实体类java

publicclassUser{

//主键ID

privateIntegerid;

//用户名

privateStringusername;

//年龄

privateIntegerage;

//手机号

privateStringphone;

//无参构造(Hibernate必须提供)

publicUser(){}

//有参构造、get/set方法

publicUser(Stringusername,Integerage,Stringphone){

this.username=username;

this.age=age;

this.phone=phone;

}

publicIntegergetId(){

returnid;

}

publicvoidsetId(Integerid){

this.id=id;

}

publicStringgetUsername(){

returnusername;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

publicIntegergetAge(){

returnage;

}

publicvoidsetAge(Integerage){

this.age=age;

}

publicStringgetPhone(){

returnphone;

}

publicvoidsetPhone(Stringphone){

this.phone=phone;

}

}2.映射文件User.hbm.xml(与实体类同目录)xml

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEhibernate-mappingPUBLIC

"-//Hibernate/HibernateMappingDTD3.0//EN"

"/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mappingpackage="com.entity">

<!--映射实体类与数据表-->

<classname="User"table="tb_user">

<!--主键映射-->

<idname="id"column="id"type="java.lang.Integer">

<!--MySQL自增主键策略-->

<generatorclass="identity"/>

</id>

<!--普通属性映射-->

<propertyname="username"column="username"type="string"not-null="true"/>

<propertyname="age"column="age"type="java.lang.Integer"/>

<propertyname="phone"column="phone"type="string"/>

</class>

</hibernate-mapping>3.核心配置文件hibernate.cfg.xmlxml

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEhibernate-configurationPUBLIC

"-//Hibernate/HibernateConfigurationDTD3.0//EN"

"/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!--数据库连接配置-->

<propertyname="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>

<propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_db?useSSL=false&serverTimezone=UTC</property>

<propertyname="hibernate.connection.username">root</property>

<propertyname="hibernate.connection.password">123456</property>

<!--数据库方言-->

<propertyname="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>

<!--自动更新表结构-->

<propertyname="hibernate.hbm2ddl.auto">update</property>

<!--打印SQL语句-->

<propertyname="hibernate.show_sql">true</property>

<!--格式化SQL-->

<propertyname="hibernate.format_sql">true</property>

<!--引入映射文件-->

<mappingresource="com/entity/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>4.测试代码java

importorg.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.cfg.Configuration;

publicclassUserTest{

publicstaticvoidmain(String[]args){

//1.加载配置文件,创建Session工厂

Configurationcfg=newConfiguration().configure();

SessionFactorysessionFactory=cfg.buildSessionFactory();

//2.开启Session

Sessionsession=sessionFactory.openSession();

try{

温馨提示

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

评论

0/150

提交评论