更新時間:2022-12-19 16:06:12 來源:動力節點 瀏覽1439次
MyBatis是一個半ORM(對象關系映射)框架,它內部封裝了JDBC,開發時只需要關注SQL語句本身,不需要花費精力去加載驅動、創建連接、創建Statement等繁雜過程。程序員直接編寫原生態sql,可以嚴格控制sql執行性能,靈活度高。所以MyBatis是我們在面試時需要準備的:
1、#{}和${}的區別是什么?
${}是字符串替換,相當于直接顯示數據,#{}是預編譯處理,相當于對數據加上雙引號
即#是將傳入的值當做字符串的形式,先替換為?號,然后調用PreparedStatement的set方法來賦值,而$是將傳入的數據直接顯示生成sql語句
--Mybatis在處理#{}時
select id,name,age from student where id =#{id}
當前端把id值1傳入到后臺的時候,就相當于:
select id,name,age from student where id ='1'
--Mybatis在處理${}時
select id,name,age from student where id =${id}
當前端把id值1傳入到后臺的時候,就相當于:
select id,name,age from student where id = 1
PS:使用#{}可以有效的防止SQL注入,提高系統安全性(語句的拼接),如果使用在order by 中就需要使用 ${}。
最大區別在于:#{} 傳入值時,sql解析參數是帶引號的,而${}傳入值時,sql解析參數是不帶引號的。
2、如何理解Mybatis?(Mybatis是什么)
Mybatis內部封裝了jdbc,開發者只需要關注sql語句本身,而不需要花費精力去處理加載驅動、創建連接、創建statement等繁雜的過程。
mybatis通過xml或注解的方式將要執行的各種statement配置起來,并通過java對象和statement中sql的動態參數進行映射生成最終執行的sql語句,最后由mybatis框架執行sql并將結果映射為java對象并返回。
(3)MyBatis 支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJO映射成數據庫中的記錄。
3、Mybatis 中一級緩存與二級緩存的區別?
緩存:合理使用緩存是優化中最常見的方法之一,將從數據庫中查詢出來的數據放入緩存中,下次使用時不必從數據庫查詢,而是直接從緩存中讀取,避免頻繁操作數據庫,減輕數據庫的壓力,同時提高系統性能。
一級緩存是SqlSession級別的緩存:
Mybatis對緩存提供支持,但是在沒有配置的默認情況下,它只開啟一級緩存。一級緩存在操作數據庫時需要構造sqlSession對象,在對象中有一個數據結構用于存儲緩存數據。不同的sqlSession之間的緩存數據區域是互相不影響的。也就是他只能作用在同一個sqlSession中,不同的sqlSession中的緩存是互相不能讀取的。
二級緩存是mapper級別的緩存:
MyBatis的二級緩存是mapper級別的緩存,它可以提高對數據庫查詢的效率,以提高應用的性能。多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的。
開啟二級緩存:
A.mybatis.xml配置文件中加入:
<span style="font-size:18px;"><settings>
<!--開啟二級緩存-->
<setting name="cacheEnabled" value="true"/>
</settings> </span>
B.在需要開啟二級緩存的mapper.xml中加入caceh標簽
<span style="font-size:18px;"><cache/></span>
C.讓使用二級緩存的POJO類實現Serializable接口
<span style="font-size:18px;">public class User implements Serializable {}</span>
4、使用 MyBatis 的 mapper 接口調用時有哪些要求?
A. Mapper 接口方法名和 mapper.xml 中定義的每個 sql 的 id 相同
B. Mapper 接口方法的輸入參數類型和 mapper.xml 中定義的每個 sql 的 parameterType 的類型相同
C. Mapper 接口方法的輸出參數類型和 mapper.xml 中定義的每個 sql 的 resultType 的類型相同
D. Mapper.xml 文件中的 namespace 即是 mapper 接口的類路徑
(平常用會用,但是面試時,會想不起來,這個常考)
5、簡述一下Mybatis 的編程步驟
A.創建 SqlSessionFactory
B.通過 SqlSessionFactory 創建 SqlSession
C.通過 sqlsession 執行數據庫操作
D.調用 session.commit()提交事務
E.調用 session.close()關閉會話
6、MyBatis中接口綁定有幾種實現方式,是怎么實現的?
A.通過注解綁定,在接口的方法上面加上 @Select@Update等注解里面包含Sql語句來綁定(Sql語句比較簡單的時候,推薦注解綁定)
B.通過xml里面寫SQL來綁定, 指定xml映射文件里面的namespace必須為接口的全路徑名(SQL語句比較復雜的時候,推薦xml綁定)
以上就是“總結比較全面的mybatis常見面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習