一、什麼是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,最後需要添加對應資料表的結果集映射進來。