MyBatis常見問題

一、什麼是Mybatis

1、Mybatis是一個類似於Hibernate的ORM持久層開源框架,

2、Mybatis通過XML或者註解配置和映射,實現對數據庫的訪問

3、Mybatis的核心設計理念是基於原生sql進行的,正是由於這個設計理念使得Mybatis相對於Hibernate框架執行效率更高,但是代碼的可移植性差,由於Mybatis是一個輕量級的框架,框架本身提供的功能較少,但是使用的靈活性更高。

二、結果集映射

1、結果集映射是在Mybatis的xml映射文件中進行配置的一個映射,表示查詢語句結果集中每一條記錄如何轉換成對應的java對象,將我們的java對象和數據表中的字段一一對應。

2、他是通過resultMap這個標籤進行配置,裏面屬性有type和id,id是這個結果集映射的唯一一個標識,用於查詢標籤的一個引用,type屬性用於設置查詢結果需要轉換的java對象,就是相對應的實體類,可以寫全類名,當我們在Mybatis配置文件中配置默認掃描包或者配置類的別名的時候可以使用類名或者別名

3、一共有2個字標籤,分別是id和result,id於配置數據表主鍵對應關係,result用於設置其他字段和類屬性的一個對應,這兩個標籤都有2個屬性,propery和column,分別設置java對象的屬性和數據表字段名

三、動態SQL

1、Mybatis的動態SQL是Mybatis靈活性的一種體現,可以通過外部傳入的參數,使用一系列標籤,靈活的拼接sql語句

2、裏面主要有這幾個標籤,if、where、set、foreach、choose、when、otherwise,

3、if標籤用來進行條件判斷,有一個test屬性,添加判斷條件,多個if標籤時,記得用。where標籤取代sql中的where命令,若標籤中無任意結果,則where不會出現在sql中,記得在前面加一個and用來連接;set標籤用來取代sql中update set命令;foreach標籤進行循環遍歷,有collection、item、open、close、separator屬性,分別指傳入的參數類型,臨時變量、語句開始和結束需要拼接的內容,分隔符;choose、when、otherwise相當於java中的多重if結構

四、#和$區別

1、兩者都是用來進行參數傳遞

2、#的方式更常用,內部封裝了prepareStatement接口,進行預編譯處理,相當於JDBC中爲?佔位符賦值,這種相對安全,的方式是字符串拼接,用號取到的數據會那需要使用正確的格式,拼接到sql中

3、當比較而言#更加的安全,能有效的方式sql注入

五、多表間關聯查詢

1、開發中經常查詢數據會用到多張表進行查詢,比如查詢一個用戶可以有多個訂單,但是用戶表和商品表是兩張不同的表,如果要查詢用戶以及其對應的商品信息就需要用到多表聯查

2、主要有兩種方式,第一種編寫帶有連接查詢的sql,將需要的字段從多張表中取出,放入結果集,首先在實體類中添加屬性對應數據表中字段,其次,在映射文件的結果集映射中添加result標籤,爲新增的屬性設置對應字段,最後修改查詢sql,添加連接查詢,

3、這種方式很少用,方式二是,使用標籤通過指定的格式進行配置,在查詢時自動獲取相關數據表的數據,主要用到兩個標籤,association處理多對一的關係,一般設置在多的一方的配置文件中,用於子表查詢主表,collection標籤處理一對多,設置在一的一方的配置文件中,用於主表查詢子表,

4、如何使用呢?首先在實體類中添加屬性,一的一方添加多的一方的集合對象,泛型是多的一方的對象,多的一方添加一的一方的對象,其次在配置文件的結果集中添加標籤,多的一方用association,一的一方用collection,對標籤進行配置,分別有property、column、select屬性,property自動查詢的結果保存到那個實體類,column設置攜帶到查詢語句中的字段,select設置自動執行的sql語句的id,最後需要添加對應數據表的結果集映射進來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章