一、选择题(共25题,每题2.5分,选择一项或多项,漏选错选不得分)

1.在Hibernate中,以下关于主键生成器说法错误的是( )。

A.increment可以用于类型为long、short或byte的主键

B.identity用于如SQL Server、DB2、MySQL等支持标识列的数据库

C.sequence用于如Oracle、SQL Server等支持序列的数据库

D.native由Hibernate根据底层数据库自行判断采用何种主键生成策略,是由使用的数据库生成主键的值

2.在Hibernate中,关于脏检查和刷新缓存说法正确的是( )。

A.当事务提交时,会发生脏检查

B.Session的flush( )方法是刷新缓存的方法

C.在执行Session的commit( )方法之前不会调用Session的flush( )方法

D.编写代码时,调用commit( )方法之前要调用flush( )方法

3.使用HQL查询所有部门信息,以下正确的是( )。

A.from Dept

B.select * from cn.jbit.demo.entity.Dept

C.select Dept from cn.jbit.demo.entity.Dept d

D.select d from Dept d

4.关于Query接口的list( )和iterate( )方法,说法正确的是( )。

A.执行list( )方法,查询所有符合条件的记录

B.执行iterate( )方法,查询所有符合条件的记录

C.执行list( )方法,查询出所有符合条件的主键值

D.执行iterate ( )方法,查询出所有符合条件的主键值

5.在HQL中,关于Query接口绑定参数的方法,说法正确的是( )。

A.setParameter( )方法用于绑定任意类型的参数

B.setParameter( )有重载的方法

C.setProperties( )有重载的方法

D.setProperties( )方法用于绑定命名参数

6.在Hibernate中,关于以下映射配置,说法错误的是( )。

<hibernate-mapping>

<class name="cn.jbit.hibernatedemo.entity.Emp" table="EMP" schema="scott">

<id name="empNo" column="EMPNO" type="java.lang.Integer">

<generator class="assigned"/>

</id>

<property name="salary" type="java.lang.Double" column="SAL"/>

<property name="hireDate" type="java.util.Date"/>

<many-to-one

name="dept"

column="DEPTNO"

class="cn.jbit.hibernatedemo.entity.Dept"

/>

</class>

</hibernate-mapping>

A.此配置信息描述了cn.jbit.hibernatedemo.entity.Emp类和EMP表的映射

B.描述的是scott用户的EMP表

C.<many-to-one>标签中的name属性值dept是cn.jbit.hibernatedemo.entity.Emp类的属性名

D.<many-to-one>标签中的column属性值DEPTNO是dept表的主键名

7.在Hibernate映射文件中,关于inverse属性说法正确的是( )。

A.inverse属性有两个值:true、false

B.<many-to-one>标签有inverse属性

C.<set>标签有inverse属性

D.inverse属性用于指定维护关联关系的那一方

8.在Hibernate映射文件中,关于延迟加载配置说法错误的是( )

A.<class>标签中lazy属性可选值:true、false

B.<set>标签中lazy属性可选值:true、proxy和no-proxy

C.< set>标签中lazy属性可选值:true、extra和false

D.<many-to-one>标签中lazy属性可选值:proxy、true和false

9.在Hibernate映射文件中,关于<component>标签说法正确的是( )。

A.<component>标签用来映射组件类

B.<component>标签通过<parent>指定组件类所属的整体类

C.<component>标签通过<property>指定组件类的属性

D.<component>标签有id、name、class属性

10.MyBatis指定配置文件的根元素使用的是( )。

A.<sqlMapConfig>

B.<configuration>

C.<setting>

D.<environments>

11.在MyBatis中,ExecutorType的值包括( )。

A.ExecutorType.SIMPLE

B.ExecutorType.BATCH

C.ExecutorType.EXECUTE

D.ExecutorType.REUSE

12.关于Hibernate缓存说法错误的是( )。

A.Hibernate缓存一般分为三类:一级缓存、二级缓存和查询缓存

B.Session的evict( )方法用于从缓存中清除指定的持久化对象

C.Session的clear( )方法用于刷新缓存

D.Session的flush( )方法用于从缓存中清除所有持久化对象

13.关于HQL的连接查询,说法错误的是( )。

A.inner join 或 join用于内连接

B.inner join fetch或 join fetch用于迫切内连接

C.left outer join fetch 或 left join fetch用于迫切左外连接

D.right outer join fetch 或 right join fetch用于迫切右外连接

14.关于Hibernate批量处理数据说法正确的是( )。

A.使用HQL进行批量操作,Hibernate不支持批量插入

B.使用JDBC API进行批量操作,SQL语句中涉及的数据会被加载到Session缓存,占用内存空间

C.使用Session进行批量操作,数据会被加载到Session缓存,需注意刷新并清空缓存

D.使用Session进行批量操作,适用于需要通过代码处理的复杂的业务逻辑场景

15.关于HQL的聚合函数使用,说法正确的是( )。

A.select count(*) from Dept d用于统计部门个数

B.select sum(e.salary) from Emp e用于汇总员工工资总额

C.select max(e.hiredate) from Emp e用于找到最新入职的员工的入职时间

D.select min(e.hiredate) from Emp e用于找到最早入职的员工的入职时间

16.关于HQL子查询中,说法错误的是( )。

A.size( )或size用于获取集合中元素的数目

B.elements( )用于获取集合中的所有元素

C.any关键字用于子查询语句返回所有记录

D.in关键字与“=any”意思相同

17.关于原生SQL查询和命名查询,说法正确的是( )。

A.执行原生SQL,需使用SQLQuery对象

B.SQLQuery是一个接口,继承了Query接口

C.Hibernate支持在映射文件中定义字符串形式的查询语句,这样的语句是命名查询语句

D.命名查询语句只能是HQL语句,不能是SQL语句

18.在 Hibernate中,关于映射Oracle中的BLOB和CLOB类型的方法,说法正确的是( )。

A.CLOB类型只能映射为java.lang.String

B.BLOB类型可以映射为java.sql.Blob

C.BLOB类型可以映射为byte[]

D.CLOB类型可以映射为java.lang.String或java.sql.Clob

19.在Hibernate中,关于Criteria运算方法说法错误的是( )。

A.Restrictions.ge( )方法等同于HQL运算符 >=

B.Restrictions.like("empName","s",MatchMode.START)方法用于查找姓名以s开头的员工

C.Restrictions.disjunction( )方法用于指定多个逻辑与

D.Restrictions.in( )方法只能用于数组

20.在Hibernate中,关于注解说法正确的是( )。

A.@Id用于声明持久化类的唯一标识,对应于数据表中的主键

B.@Cloumn用于将属性映射到列

C.@Transient用于忽略该属性,需要持久化到数据库

D.@GeneratedValue用于定义主键值的生成策略

21.下列关于同义词的说法,选项正确的是( )。

A.只能为表创建同义词,不能为视图创建同义词

B.同义词只能用于引用其他用户创建的表

C.公有同义词和私有同义词对同一个表可以同名

D.使用Drop Synonym语句删除同义词的同时,同义词引用的表也无效

22.评估CREATE TABLE 语句:

CREATE TABLE products

(

product_id NUMBER(6) CONSTRAINT prod_id_pk PRIMARY KEY,

product_name VARCHAR2(15)

)

下列关于prod_id_pk选项正确的是( )。

A.可以被创建,但需要唯一索引用手工创建

B.可以被创建并且会自动创建唯一索引

C.可以被创建并且会自动创建非唯一索引

D.可以被创建但不可以使用,因为没有指定索引

23.下列创建序列的SQL语句:

CREATE SEQUENCE seq1

START WITH 100

INCREMENT BY 10

MINVALUE 1

MAXVALUE 200

CYCLE

NOCACHE;

序列seq1的生成的值已经到最大值200,再执行下列语句:

SELECT seq1.nextval FROM dual;

下列显式正确值的选项是( )。

A.1

B.10

C.100

D.报错

24.A_oe和A_hr是数据库中的2个用户,A_oe下有一个表Orders,执行下列语句如下:

CREATE ROLE r1;

GRNAT SELECT,INSERT ON A_oe.orders to r1;

GRANT r1 to A_hr;

GRANT SELECT ON A_oe.orders To A_hr;

REVOKE SELECT ON A_oe.orders FROM A_hr;

执行上面语句后结果正确的是( )。

A.A_hr能够查询A_oe.orders表

B.A_hr不能够查询A_oe.orders表

C.REVOKE语句将撤销A_hr的SELECT权限同时也从r1角色撤销SELECT权限

D.REVOKE语句将报错,因为SELECT权限已经被r1角色授予

25.对于视图,下列语句正确的是( )。

A.有列别名的视图不能被修改

B.一个复杂的视图定义中使用子查询不能包含聚合(分组)函数和连接

C.如果一个视图定义中包含DISTINCT关键字,则不能够通过视图进行删除

D.创建视图语法中OR REPLACE 选项被使用,目的是在没有删除视图的情况下修改已存

在的视图定义。

二、简答题(共5题,每题7.5分)

1.请简述Hibernate与jdbc的联系。

2.请简述MyBatis和Hibernate的区别。

3.请详细描述在Hibernate中Java对象的三种状态是如何转换的。

4.请简述Hibernate是如何实现分页的?如果不使用Hibernate提供的方法实现分页功能,则采用什么方式分页?

5.根据员工表编写规范的存储过程。完成以下任务:

1).给指定员工涨工资,其中员工编号和涨的工资金额由输入参数决定

2).涨工资后,显示所有员工薪水情况

3).在存储过程中考虑到以下异常:

A.指定的员工不存在的情况

B.涨的工资金额小于等于0的情况

4).编写调用程序,要求测试各种情况

一、选择题(共25题,每题2.5分,选择一项或多项,漏选错选不得分)

1

2

3

4

5

AC

AB

AD

AD

ABCD

6

7

8

9

10

D

ACD

BD

ABC

B

11

12

13

14

15

ABD

CD

D

CD

ABCD

16

17

18

19

20

C

ABC

BCD

CD

ABD

21

22

23

24

25

C

B

A

A

CD

二、简答题(共5题,每题7.5分)

1.

评分要点:

评分点

分数

Hibernate是jdbc的轻量级封装

4

HQL语句也是面向对象的

3.5

参考答案:

Hibernate是jdbc的轻量级封装,包括jdbc的与数据库的连接(用hibernate的配置文件实现,本质是封装了jdbc),和查询,删除等代码,都用面向对象的思想用代码联系起来,Hibernate通过hbm 配置文件(或注解)把持久化类的字段和数据库的字段关联起来比如数据库的id。

HQL语句也是面向对象的,它的查询语句不是查询数据库而是查询类的。

2.

评分要点:

评分点

分数

写出3条满分,少一条扣2分,直到扣完为止

7.5

参考答案:

调优方案:

Hibernate的调优方案:

  1. 制定合理的缓存策略;
  2. 尽量使用延迟加载特性;
  3. 采用合理的Session管理机制;
  4. 使用批量抓取,设定合理的批处理参数(batch_size);
  5. 进行合理的O/R映射设计

Mybatis调优方案:

MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。 MyBatis可以进行详细的SQL优化设计。

1> SQL优化方面

Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。Hibernate SQL语句的调优需要将SQL打印出来,而Hibernate的SQL被很多人嫌弃因为太丑了。MyBatis的SQL是自己手动写的所以调整方便。但Hibernate具有自己的日志统计。Mybatis本身不带日志统计,使用Log4j进行日志记录

2> 扩展性方面

Hibernate与具体数据库的关联只需在XML文件中配置即可,所有的SQL语句与具体使用的数据库无关,移植性很好。MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。

3.

评分要点:

评分点

分数

写出5种转换得满分,少一种扣1分,直到扣完为止

4

写出导致转换的方法得满分,少一个扣1分,直到扣完为止。

3.5

参考答案:

瞬时状态转为持久状态

使用Session对象的save()或saveOrUpdate()方法保存对象后,该对象的状态由瞬时状态转换为持久状态。

使用Session对象的get()或load()方法获取对象,该对象的状态是持久状态。

持久状态转为瞬时状态

执行Session对象的delete()方法后,对象由原来的持久状态变为瞬时状态,因为此时该对象没有与任何的数据库数据关联。

持久状态转为游离状态

执行了Session对象的evict() 、clear()、close()方法,对象由原来的持久状态转为游离状态。

游离状态转为持久状态

重新获取Session对象,执行Session对象的update()或saveOrUpdate()方法,对象由游离状态转为持久状态,因为该对象再次与Session对象相关联。

游离状态转为瞬时状态

执行Session对象的delete()方法,对象由游离状态转为瞬时状态。

处于瞬时状态或游离状态的对象,会被Java虚拟机按照垃圾回收机制处理。

使用以下图形描述也可以

4.

评分要点:

评分点

分数

写出2条满分,少一条扣4分,直到扣完为止

7.5

参考答案:

1、Hibernate的分页机制:获得Session对象后,从Session中获得Query对象(或者Criteria对象)。接下来调用以下方法:

Query.setFirstResult( )(或者Criteria.setFirstResult( )):设置要显示的第一行数据,

Query.setMaxResults( )(或者Criteria.setMaxResults( )):设置最多要显示几行数据。

2、不使用Hibernate的分页机制,可采用SQL语句分页,以Oracle为例,

如:5:为每页显示的记录,2为当前页:

select b.* from

(select a.*,rownum rn from

( select * from dept order by deptno) a

) b

where b.rn> (2-1)*5 and b.rn<=2*5

5.

评分要点:

评分点

分数

正确书写存储过程参数

1

正确定义游标

1

正确处理薪水小于等于0异常

1

正确处理员工不存在异常

1

正确显式游标内容

1

正确调用存储过程-薪水异常

0.5

正确调用存储过程-员工编号异常

0.5

正确调用存储过程-成功

1

存储过程中含有规范中建议的2个返回参数

0.5

参考答案:

  1. CREATE OR REPLACE PROCEDURE raise_salary
  2. (eno NUMBER, --输入参数,雇员编号
  3. salary NUMBER, --输入参数,雇员薪水
  4. on_Flag OUT number, --执行状态
  5. os_Msg OUT VARCHAR2 --提示信息
  6. ) IS
  7. CURSOR emp_cur IS
  8. SELECT ename,sal FROM employee;
  9. v_emp emp_cur%ROWTYPE;
  10. exp1 EXCEPTION;
  11. exp2 EXCEPTION;
  12. BEGIN
  13. IF salary<=0 THEN
  14. RAISE exp1;
  15. END IF;
  16. UPDATE EMPLOYEE
  17. SET sal=sal+salary
  18. WHERE empno=eno;
  19. IF SQL%NOTFOUND THEN
  20. RAISE exp2;
  21. END IF;
  22. on_Flag:=1;
  23. os_Msg:='修改成功';
  24. OPEN emp_cur;
  25. LOOP
  26. FETCH emp_cur INTO v_emp;
  27. EXIT WHEN emp_cur%NOTFOUND;
  28. dbms_output.put_line(v_emp.ename||v_emp.sal);
  29. END LOOP;
  30. CLOSE emp_cur;
  31. EXCEPTION
  32. WHEN exp1 THEN
  33. on_Flag:=-1;
  34. os_Msg:='涨的薪水不能小于等于0。';
  35. WHEN exp2 THEN
  36. on_Flag:=-2;
  37. os_Msg:='不存在该员工。';
  38. WHEN OTHERS THEN
  39. on_Flag:=SQLcode;
  40. os_Msg:=SQLERRM;
  41. END;
  42.  
  43. --调用1不存在该员工
  44. DECLARE
  45. v_empno employee.empno%TYPE:=1234;
  46. v_sal employee.sal%TYPE:=50;
  47. on_Flag number(1); --执行状态
  48. os_Msg VARCHAR2(200); --提示信息
  49. BEGIN
  50. raise_salary(v_empno,v_sal,on_Flag,os_Msg);
  51. IF on_flag=1 THEN
  52. dbms_output.put_line(os_msg);
  53. END IF;
  54. IF on_flag=-1 THEN
  55. dbms_output.put_line(os_msg);
  56. END IF;
  57. IF on_flag=-2 THEN
  58. dbms_output.put_line(os_msg);
  59. END IF;
  60. END;
  61.  
  62. --调用2涨的薪水不能小于等于0
  63. DECLARE
  64. v_empno employee.empno%TYPE:=7788;
  65. v_sal employee.sal%TYPE:=0;
  66. on_Flag number(1); --执行状态
  67. os_Msg VARCHAR2(200); --提示信息
  68. BEGIN
  69. raise_salary(v_empno,v_sal,on_Flag,os_Msg);
  70. IF on_flag=1 THEN
  71. dbms_output.put_line(os_msg);
  72. END IF;
  73. IF on_flag=-1 THEN
  74. dbms_output.put_line(os_msg);
  75. END IF;
  76. IF on_flag=-2 THEN
  77. dbms_output.put_line(os_msg);
  78. END IF;
  79. END;
  80.  
  81. --调用3修改成功
  82. DECLARE
  83. v_empno employee.empno%TYPE:=7788;
  84. v_sal employee.sal%TYPE:=50;
  85. on_Flag number(1); --执行状态
  86. os_Msg VARCHAR2(200); --提示信息
  87. BEGIN
  88. raise_salary(v_empno,v_sal,on_Flag,os_Msg);
  89. IF on_flag=1 THEN
  90. dbms_output.put_line(os_msg);
  91. END IF;
  92. IF on_flag=-1 THEN
  93. dbms_output.put_line(os_msg);
  94. END IF;
  95. IF on_flag=-2 THEN
  96. dbms_output.put_line(os_msg);
  97. END IF;
  98. END;

hibernate内部测试题(附赠答案)的更多相关文章

  1. 《深入.NET平台和C#编程》内部测试题-笔试试卷答案

    1)      以下关于序列化和反序列化的描述错误的是( C). a)      序列化是将对象的状态存储到特定存储介质中的过程 b)      二进制格式化器的Serialize()和Deseria ...

  2. hibernate内部测试题总结

    在Hibernate中,关于脏检查和刷新缓存说法正确的是(ab ). A.当事务提交时,会发生脏检查 B.Session的flush( )方法是刷新缓存的方法 C.在执行Session的commit( ...

  3. JAVA语言基础内部测试题(50道选择题)

    JAVA语言基础内部测试题 选择题(针对以下题目,请选择最符合题目要求的答案,针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分.)(每题2分) 没有注明选择几项 ...

  4. 【SQL】靠谱的TRIM函数,附赠过程一枚

    SQL中有LTRIM和RTRIM这两个函数分别用于去除字符串的首.尾空格,缺乏常见的能同时去除首尾的TRIM函数,另外,这俩函数都只对[空格]有效,所以如果首尾是制表符.换行符等等[空白],它们是不处 ...

  5. 【Python】把文件名命名成canlendar.py竟然导致无法使用canlendar模块 附赠2020年月历

    这个bug困扰了我一阵,直到在 http://www.codingke.com/question/15489 找到了解决问题的钥匙,真是没想到居然是这个原因导致的. 下面是出错信息,可以看到只要目录下 ...

  6. Oracle笔试题库 附参考答案

    1.  下列不属于ORACLE的逻辑结构的是(C) 区 段 数据文件 表空间 2. 下面哪个用户不是ORACLE缺省安装后就存在的用户(A) A . SYSDBA B. SYSTEM C. SCOTT ...

  7. 史上最全Java面试题整理(附参考答案)

    下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正,更多精彩内容可以关注我的微信公众号:Java团长 1.面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来 ...

  8. 洛谷P3366【模板】最小生成树-克鲁斯卡尔Kruskal算法详解附赠习题

    链接 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M&l ...

  9. 2018春招-今日头条笔试题5题(后附大佬答案-c++版)

    1题目描述 在n个元素的数组中,找到差值为k的除重后的数字对 输入描述 第一行:n和k,n表示数字的个数,k表示差值 第二行:n个整数 输入样例 输入: 5 2 1 5 3 4 2 输出: 3 说明: ...

随机推荐

  1. SQL2008游标

    最近让写一个自动生成数据的存储过程,其中会遍历表中数据并做出相应处理,因为数据量不算太大所以使用到了游标,初识游标遇到几个小问题,所以来和大家一起分享一下: 使用游标的五个步骤: 1.声明游标 语法: ...

  2. 2.4G高频PCB天线设计

    2.4G高频PCB天线设计 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.   参考链接: http://bbs.rfeda.cn/read-htm-t ...

  3. Java开发中经典的小实例-(100能被3整除的数打印出来)

    public class Test21 {    public static void main(String[] args) {        // TODO Auto-generated meth ...

  4. CSS布局基础之一设备像素,设备独立像素,设备像素比,css像素之间的关系

    设备像素dp(device pixels) ppi(pixels per inch)表示每英寸所拥有的像素(pixel)数目,数值越高,代表屏幕能以更高的密度显示图像. 计算公式:ppi=像素数量/物 ...

  5. iPhone6搜索如何打开?详细使用方法

    iphone6搜索功能在哪?怎么用呢?当iPhone6中安装了太多的应用或者联系人太多时,我们就可以使用iPhone6搜索功能就能快速找到,但是还有很多朋友对于iphone6搜索功能在哪,怎么用还不太 ...

  6. JavaScript中的String

    1.基本类型String var str ="helloworld"; 要记住:保存的是Unicode字符,一旦创建便不可变   2.引用类型String var strObj = ...

  7. List怎么遍历删除元素

    public static void main(String[] args) {  List<String> list = new ArrayList<String>();   ...

  8. python 正则表达式总结

    一.匹配元字符 使用元字符可以简便操作,写正则表达式时更方便 常用元字符: . 它匹配除了换行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行  ^ 匹配行首. ...

  9. FACADE

    1 意图:为子系统中的一组接口提供一个一直的界面,Facade模式定义了一个高层接口.这个接口使得这一子系统更加容易使用, 2 动机,便于不需要更多功能的人通过Facade 简化使用 3 适用性: . ...

  10. Samba Linux 和windows 共享

    1.安装Samba  (yum install Samba) 2.配置Samba  (Samba的配置文件为/etc/samba/smb.conf) 1)打开smb.conf   vim /etc/s ...