《使用Hibernate開發租房系統》自我裝載筆試題

來源:互聯網
上載者:User

標籤:

 

 《使用Hibernate開發租房系統》自我裝載筆試題

一、選擇題(共25題,每題2.5分,選擇一項或多項,漏選錯選不得分)

1.在Hibernate中,以下關於主鍵產生器說法錯誤的是(C )。

A.increment可以用於類型為long、short或byte的主鍵

B.identity用於如SQL Server、DB2、MySQL等支援識別欄位的資料庫

C.sequence用於如Oracle、SQL Server等支援序列的資料庫

D.native由Hibernate根據底層資料庫自行判斷採用何種主鍵建置原則,是由使用的資料庫產生主鍵的值

 

 

2.在Hibernate中,關於髒檢查和重新整理緩衝說法正確的是( AB)。

A.當事務提交時,會發生髒檢查

B.Session的flush( )方法是重新整理緩衝的方法

C.在執行Session的commit( )方法之前不會調用Session的flush( )方法

D.編寫代碼時,調用commit( )方法之前要調用flush( )方法

 

3.使用HQL查詢所有部門資訊,以下正確的是(AD )。

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( )方法,說法正確的是(AD )。

A.執行list( )方法,查詢所有合格記錄

B.執行iterate( )方法,查詢所有合格記錄

C.執行list( )方法,查詢出所有合格主索引值

D.執行iterate ( )方法,查詢出所有合格主索引值

 

5.在HQL中,關於Query介面綁定參數的方法,說法正確的是(ABCD )。

A.setParameter( )方法用於綁定任意類型的參數

B.setParameter( )有重載的方法

C.setProperties( )有重載的方法

D.setProperties( )方法用於綁定具名引數

 

6.在Hibernate中,關於以下映射配置,說法錯誤的是(D )。

<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屬性說法正確的是(ACD )。

A.inverse屬性有兩個值:true、false

B.<many-to-one>標籤有inverse屬性

C.<set>標籤有inverse屬性

D.inverse屬性用於指定維護關聯關係的那一方

 

 

8.在Hibernate對應檔中,關於消極式載入配置說法錯誤的是(BD )

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>標籤說法正確的是(ABC )。

A.<component>標籤用來映射組件類

B.<component>標籤通過<parent>指定組件類所屬的整體類

C.<component>標籤通過<property>指定組件類的屬性

D.<component>標籤有id、name、class屬性

 

 

10.MyBatis指定設定檔的根項目使用的是(B )。

A.<sqlMapConfig>

B.<configuration>

C.<setting>

D.<environments>

 

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

A.ExecutorType.SIMPLE

B.ExecutorType.BATCH

C.ExecutorType.EXECUTE

D.ExecutorType.REUSE

 解釋:

一個意外 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;

12.關於Hibernate緩衝說法錯誤的是(CD )。

A.Hibernate緩衝一般分為三類:一級緩衝、二級緩衝和查詢快取

B.Session的evict( )方法用於從緩衝中清除指定的持久化對象

C.Session的clear( )方法用於重新整理緩衝

D.Session的flush( )方法用於從緩衝中清除所有持久化對象

 

13.關於HQL的串連查詢,說法錯誤的是(D )。

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批量處理資料說法正確的是(CD )。

A.使用HQL進行大量操作,Hibernate不支援批量插入

B.使用JDBC API進行大量操作,SQL語句中涉及的資料會被載入到Session緩衝,佔用記憶體空間

C.使用Session進行大量操作,資料會被載入到Session緩衝,需注意重新整理並清空緩衝

D.使用Session進行大量操作,適用於需要通過代碼處理的複雜的商務邏輯情境

 解釋:批量處理資料

方式一:
使用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進行大量操作,適用於需要通過代碼處理的複雜的商務邏輯情境

15.關於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用於找到最早入職的員工的入職時間

 解釋:HQL面向的是對象和屬性,不是表和欄位

16.關於HQL子查詢中,說法錯誤的是(C )。

A.size( )或size用於擷取集合中元素的數目

B.elements( )擷取集合中的所有元用於素

C.any關鍵字用於子查詢語句返回所有記錄

D.in關鍵字與“=any”意思相同

 

17.關於原生SQL查詢和命名查詢,說法正確的是(ABC )。

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();
}

18.在 Hibernate中,關於映射Oracle中的BLOB和CLOB類型的方法,說法正確的是(BCD )。

A.CLOB類型只能映射為java.lang.String

B.BLOB類型可以映射為java.sql.Blob

C.BLOB類型可以映射為byte[]

D.CLOB類型可以映射為java.lang.String或java.sql.Clob

 

19.在Hibernate中,關於Criteria運算方法說法錯誤的是(CD )。

A.Restrictions.ge( )方法等同於HQL運算子 >=

B.Restrictions.like("empName","s",MatchMode.START)方法用於尋找姓名以s開頭的員工

C.Restrictions.disjunction( )方法用於指定多個邏輯與

D.Restrictions.in( )方法只能用於數組

 

20.在Hibernate中,關於註解說法正確的是(ABD )。

A.@Id用於聲明持久化類的唯一標識,對應於資料表中的主鍵

B.@Cloumn用於將屬性對應到列

C.@Transient用於忽略該屬性,需要持久化到資料庫

D.@GeneratedValue用於定義主索引值的建置原則

 解釋:Hibernate常見註解

@Id
@Column
@Table
@Entity
@GeneratedValue
@ManyToOne
@JoinColumn

/** * 部門類 * @author Happy 2016年9月22日19:40:56 * */@Entity   標識一個類是 持久化類@Table(name="DeptY2160")public class Dept {    @Id   持久化類的標識       Hibernate_Session    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_gen")    定義自己的序列產生器    @SequenceGenerator(name="seq_gen",sequenceName="SEQ_Num",allocationSize=1,initialValue=1)    private Integer deptNo;    private String deptName;    @OneToMany(mappedBy="dept",cascade={CascadeType.ALL})/*    @Fetch(FetchMode.JOIN)    @LazyCollection(LazyCollectionOption.FALSE)*/    private Set<Emp> emps=new HashSet<Emp>();    public Set<Emp> getEmps() {        return emps;    }    public void setEmps(Set<Emp> emps) {        this.emps = emps;    }    public Dept(Integer deptNo, String deptName) {        this.deptNo = deptNo;        this.deptName = deptName;    }    public Dept() {    }    public Integer getDeptNo() {        return deptNo;    }    public void setDeptNo(Integer deptNo) {        this.deptNo = deptNo;    }    public String getDeptName() {        return deptName;    }    public void setDeptName(String deptName) {        this.deptName = deptName;    }    }

 

21.下列關於同義字的說法,選項正確的是(C )。

A.只能為表建立同義字,不能為視圖建立同義字

B.同義字只能用於引用其他使用者建立的表

C.公有同義字和私人同義字對同一個表可以同名

D.使用Drop Synonym語句刪除同義字的同時,同義字引用的表也無效

 解釋:

主鍵建置原則
@GeneratedValue用於定義主索引值的建置原則 ,相當於native

22.評估CREATE TABLE 語句:

CREATE TABLE products

(

product_id NUMBER(6) CONSTRAINT prod_id_pk PRIMARY KEY,

product_name VARCHAR2(15)

)

下列關於prod_id_pk選項正確的是(B )。

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

A.1

B.10

C.100

D.報錯

 

24.A_oe和A_hr是資料庫中的2個使用者,A_oe下有一個表Orders,執行下列語句如下:

CREATE ROLE r1;  --System下

GRNAT SELECT,INSERT ON A_oe.orders to r1;   --A_oe模式下

GRANT r1 to A_hr;   --System模式下

GRANT SELECT ON A_oe.orders To A_hr;  --A_oe模式下

REVOKE SELECT ON A_oe.orders FROM A_hr;

執行上面語句後結果正確的是(A )。

A.A_hr能夠查詢A_oe.orders表

B.A_hr不能夠查詢A_oe.orders表

C.REVOKE語句將撤銷A_hr的SELECT許可權同時也從r1角色撤銷SELECT許可權

D.REVOKE語句將報錯,因為SELECT許可權已經被r1角色授予

 

25.對於視圖,下列語句正確的是(CD )。

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).編寫調用程式,要求測試各種情況

 

《使用Hibernate開發租房系統》自我裝載筆試題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.