首页 > 代码库 > 2016年9月23日试题整理

2016年9月23日试题整理

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

Aincrement可以用于类型为longshortbyte的主键

Bidentity用于如SQL ServerDB2MySQL等支持标识列的数据库

Csequence用于如OracleSQL Server等支持序列的数据库

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

 

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

 

 

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

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

BSessionflush( )方法是刷新缓存的方法

C.在执行Sessioncommit( )方法之前不会调用Sessionflush( )方法

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

 

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

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

 两种方式:

 方式一:事务提交

 方式二:session.flush();

 

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

Afrom Dept

Bselect * from cn.jbit.demo.entity.Dept

Cselect Dept from cn.jbit.demo.entity.Dept d

Dselect 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)。

AsetParameter( )方法用于绑定任意类型的参数

BsetParameter( )有重载的方法

CsetProperties( )有重载的方法

DsetProperties( )方法用于绑定命名参数

 

 

详解AsetParameter( )方法用于绑定任意类型的参数  

BsetParameter( )有重载的方法

CsetProperties( )有重载的方法

DsetProperties( )

 

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属性值deptcn.jbit.hibernatedemo.entity.Emp类的属性名

D<many-to-one>标签中的column属性值DEPTNOdept表的主键名

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

 

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

Ainverse属性有两个值:truefalse

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

C<set>标签有inverse属性

Dinverse属性用于指定维护关联关系的那一方

.inverse

解析:维护关联关系

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

     false:自己维护关联关系

 

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

A<class>标签中lazy属性可选值:truefalse

B<set>标签中lazy属性可选值:trueproxyno-proxy

C< set>标签中lazy属性可选值:trueextrafalse

D<many-to-one>标签中lazy属性可选值:proxytruefalse 

 

延迟加载  lazy  hibernate 3.6.10版    hibernate 5

 分类

    类级别  true(默认),false

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

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

 

 

 

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

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

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

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

D<component>标签有idnameclass属性

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>

 

 

 

 

 

 

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

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的值包括( )。

AExecutorType.SIMPLE

BExecutorType.BATCH

CExecutorType.EXECUTE

DExecutorType.REUSE 

11.HQL的连接查询

Ainner join join用于内连接

Binner join fetchjoin fetch用于迫切内连接

Cleft outer join fetch left join fetch用于迫切左外连接

 

 

 

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

AHibernate缓存一般分为三类:一级缓存、二级缓存和查询缓存

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

CSessionclear( )方法用于刷新缓存

DSessionflush( )方法用于从缓存中清除所有持久化对象

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的连接查询,说法错误的是( )。

Ainner join join用于内连接

Binner join fetchjoin fetch用于迫切内连接

Cleft outer join fetch left join fetch用于迫切左外连接

Dright outer join fetch right join fetch用于迫切右外连接                   

 

 

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

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

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

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

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

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

Aselect count(*) from Dept d用于统计部门个数

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

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

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

 

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

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

Aselect count(*) from Dept d用于统计部门个数

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

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

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

 

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

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

BSQLQuery是一个接口,继承了Query接口

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

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语句删除同义词的同时,同义词引用的表也无效

2016年9月23日试题整理