2016年9月23日试题整理

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

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

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

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

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

 

选项C中,SQL Server数据库是不支持序列的。

 

 

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

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

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

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

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

 

选项A,脏检查是事务提交的时候进行的。

 刷新缓存:刷新缓存的事情就是脏检查

 两种方式:

 方式一:事务提交

 方式二:session.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

明显易懂,A是对的,C选项会报空指针错误。

D是对的。

 from Dept   检索所有部门的信息

  select d from cn.happy.entity.Student d 检索所有部门的信息 很2的写法

  select d from Dept d

 

 

 

 

 

 

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

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

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

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

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

 

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

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

B.setParameter( )有重载的方法

C.setProperties( )有重载的方法

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

 

 

详解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表的主键名

选项D中,DEPTNO是外键表的主键名

 

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

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

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

C.<set>标签有inverse属性

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

.inverse

解析:维护关联关系

     true: 自己不维护关联关系,对方维护

     false:自己维护关联关系

 

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 

 

延迟加载  lazy  hibernate 3.6.10版    hibernate 5

 分类

    类级别  true(默认),false

    一对多和多对多 true(default),false,extra(加强延迟加载)

多对一(没有set)  proxy(default),no-proxy,false

 

 

 

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

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

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

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

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

D选项是没有ID属性的。

component组件映射

<hibernate-mapping package="cn.happy.component">

   <class name="EmpInfo" table="EMPINFO">

       <id name="eid" column="EID">

        <generator class="native"></generator>

       </id>

       <property name="ename" column="ENAME" type="string"></property>

       <component  name="ehome" class="EmpHomeAddress">

          <parent name="empinfo"/>

          <property name="ehomestreet" column="EHOMESTREET" type="string"></property>

          <property name="ehomecity" column="EHOMECITY" type="string"></property>

          <property name="ehomeprovince" column="EHOMEPROVINCE" type="string"></property>

          <property name="ehomezipcode" column="EHOMEZIPCODE" type="string"></property>

       </component>

   </class>

</hibernate-mapping>

 

 

 

 

 

 

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

A.<sqlMapConfig>

B.<configuration>

C.<setting>

D.<environments>

10.一个意外 ExecutorType

public final enum org.apache.ibatis.session.ExecutorType {

  

  // Field descriptor #8 Lorg/apache/ibatis/session/ExecutorType;

  public static final enum org.apache.ibatis.session.ExecutorType SIMPLE;

  

  // Field descriptor #8 Lorg/apache/ibatis/session/ExecutorType;

  public static final enum org.apache.ibatis.session.ExecutorType REUSE;

  

  // Field descriptor #8 Lorg/apache/ibatis/session/ExecutorType;

  public static final enum org.apache.ibatis.session.ExecutorType BATCH;

 

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

A.ExecutorType.SIMPLE

B.ExecutorType.BATCH

C.ExecutorType.EXECUTE

D.ExecutorType.REUSE 

11.HQL的连接查询

A.inner join 或 join用于内连接

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

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

 

 

 

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

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

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

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

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

12.批量处理数据

 

  方式一:

    使用HQL语句

      原理:  executeUpdate

      01.批量插入数据

 @Test

   public void testInsert(){

   Session session = HibernateUtil.getSession();

   Transaction tx=session.beginTransaction();

   String hql="insert into Dept(deptName) select d.deptName||d.deptNo from Dept d where d.deptNo>0";

   session.createQuery(hql).executeUpdate();

   tx.commit();

   }

 

  方式二:JDBCAPI

  //使用JDBC API进行批量修改

 public void testUpdateUseJDBC(){

   Session session = HibernateUtil.getSession();

   Transaction tx=session.beginTransaction();

   Work work=new Work() {

@Override

public void execute(Connection connection) throws SQLException {

 String sql="update DEPTY2160New set deptName=? where deptNo>?";

 PreparedStatement ps = connection.prepareStatement(sql);

 ps.setString(1, "财务部2");

 ps.setInt(2, 1);

 ps.executeUpdate();

}

   };

   session.doWork(work);

   tx.commit();

   }

 

 

  方式三: 使用Session进行批量操作

 

   public void testAdd(){

   Session session = HibernateUtil.getSession();

   Transaction tx=session.beginTransaction();

   Emp emp=null;

   for (int i = 0; i < 10000; i++) {

   emp=new Emp(i, "emp"+i);

   session.save(emp);

   if (i%30==0) {

  session.flush();

  session.clear();

   }

   }

   tx.commit();

   }

 

  little tip:

  (1)使用HQL进行批量操作  数据库层面  executeUpdate()

  (2)使用JDBC API进行批量操作  数据库层面

  (3)使用Session进行批量操作   会进缓存

 

 

  little tip2:

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

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

 

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用于找到最早入职的员工的入职时间

 

HQL面向的是对象和属性,不是表和字段

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

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用于找到最早入职的员工的入职时间

 

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

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

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

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

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

原生SQL查询和命名查询

 

  Query query=session.createQuery(hql)

  SQLQuery query=session.createSQLQuery(sql)

 

 1.原生SQL查询

  @Test

  //原生SQL执行

  public void testClassicSQL(){

   SQLQuery query = session.createSQLQuery("select * from deptY2160new").addEntity(Dept.class);

   List<Dept> list = query.list();

   for (Dept dept : list) {

 System.out.println(dept.getDeptName());

}

    tx.commit();

  }

 

 

2.命名查询

<!-- -原生SQL   NullPointException -->

  <sql-query name="selectEmpByDetpNoClassicSQL">

     <return alias="e" class="Emp" ></return>

     select {e.*} from  EmpY2160new e where deptNo=:deptNo

  </sql-query>

 

  测试类

  public void testNamedClassicSQL(){

    Query query = session.getNamedQuery("selectEmpByDetpNoClassicSQL");

    List<Emp> list = query.setParameter("deptNo", 1).list();

   /* for (Emp emp : list) {

System.out.println(emp.getEmpName());

}*/

    tx.commit();

  }

 

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

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

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

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

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

.Hibernate常见注解

   @Id

   @Column

   @Table

   @Entity

   @GeneratedValue

   @ManyToOne

   @JoinColumn

 

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

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

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

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

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

posted @ 2016-09-23 15:56  少年丶  阅读(459)  评论(0)    收藏  举报