java簡單面試題

2021-08-26 15:02:50 字數 1948 閱讀 6230

1、#{}和${}的區別是什麼?

#{}是預編譯處理,${}是字串替換。

mybatis在處理#{}時,會將sql中的#{}替換為?號,呼叫preparedstatement的set方法來賦值;

mybatis在處理${}時,就是把${}替換成變數的值。

使用#{}可以有效的防止sql注入,提高系統安全性。

2、當實體類中的屬性名和表中的欄位名不一樣 ,怎麼辦 ?

第1種: 通過在查詢的sql語句中定義欄位名的別名,讓欄位名的別名和實體類的屬性名一致 

select order_id id, order_no orderno ,order_price price form orders where order_id=#; 

第2種: 通過來對映欄位名和實體類屬性名的一一對應的關係 

select * from orders where order_id=#

3、mybatis是如何將sql執行結果封裝為目標物件並返回的?都有哪些對映形式?

答:第一種是使用標籤,逐一定義列名和物件屬性名之間的對映關係。

第二種是使用sql列的別名功能,將列別名書寫為物件屬性名,比如t_name as name,物件屬性名一般是name,小寫,但是列名不區分大小寫,mybatis會忽略列名大小寫,智慧型找到與之對應物件屬性名,你甚至可以寫成t_name as name,mybatis一樣可以正常工作。 

有了列名與屬性名的對映關係後,mybatis通過反射建立物件,同時使用反射給物件的屬性逐一賦值並返回,那些找不到對映關係的屬性,是無法完成賦值的。

4、如何獲取自動生成的(主)鍵值?

insert 方法總是返回乙個int值 - 這個值代表的是插入的行數。 而自動生成的鍵值在 insert 方法執行完後可以被設定到傳入的引數物件中。 示例:

insert into names (name) values (#) 

name name = new name(); 

name.setname(「fred」); 

system.out.println(「rows inserted = 」 + rows); 

system.out.println(「generated key value = 」 + name.getid());

public userselectuser(string name,string area);
//對應的xml,#代表接收的是dao層中的第乙個引數,#代表dao層中第二引數,更多引數一致往後加即可。

select *  fromuser_user_t   whereuser_name = # anduser_area=#  

第2種:使用 @param 註解:

import org.apache.ibatis.annotations.param;

user selectuser(@param(「username」) string username, 

@param(「hashedpassword」) string hashedpassword); 

}

select id, username, hashedpassword from some_table 

where username = # and hashedpassword = # 

select * from class c,teacher t where c.teacher_id=t.t_id and c.c_id=#  

select * from class c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=#  

簡單面試題

1.short s1 1 s1 s1 1 有錯嗎?short s1 1 s1 1 有錯嗎?答 對於short s1 1 s1 s1 1 由於1是int型別,因此s1 1運算結果也是int 型,需要強制轉換型別才能賦值給short型。而short s1 1 s1 1 可以正確編譯,因為s1 1 相當於...

python簡單面試題(2)

首先搭建環境,然後根據專案搭建自動化框架,編寫自動化用例,整理用例,自動生成測試報告,然後整合到jenkins上進行操作 出現anr和crash進行復現抓取日誌 adb命令 編寫自動化用例的時候斷言編寫清楚,然後也可以通過用例失敗後進行截圖進行儲存,方便我們後續檢視用例失敗原因,自動化用例失敗後,進...

單鏈表的簡單面試題

define crt secure no warnings 1 include slistnode.h void test1 pushback popback void test2 pushfront popfront find else void test3 erase void test4 bu...