1. 程式人生 > >mybatis一對一、一對多關聯使用及結果巢狀和條件巢狀理解

mybatis一對一、一對多關聯使用及結果巢狀和條件巢狀理解

例一:使用association進行一對一關聯查詢,這裡使用條件巢狀並且巢狀兩層

public class ServerorderEntity
{
	private String id;
	private String serverProductId;
	private ServerproductEntity serverProduct;
}

public class ServerproductEntity
{
	private String id;
	private String serverTicketTypeId;
	private ServertickettypeEntity serverTicketType;
}

public class ServertickettypeEntity
{
	private String id;
}
三個類分別是,訂單,產品,優惠券。現要求查訂單詳情包含服務產品資訊,產品包含優惠券資訊。xml處理如下:

上面的寫法,是將原本一個比較複雜的多個連線查詢,拆成3個簡單的查詢進行關聯起來。這樣做思路比較清晰

例二:使用association和collection進行一對一、一對多關聯查詢,這裡使用結果巢狀並且巢狀兩層。

public class OrderpayticketEntity
{
	private String id;
	private List<OrderpayticketdetailEntity> orderPayTicketDetailList;
}

public class OrderpayticketdetailEntity
{
	private String id;
	private String orderpayticketId;
	private String serverTicketTypeId;
	private ServertickettypeEntity serverTicketType;
}

public class ServertickettypeEntity
{
	private String id;
}
三個類分別是,訂單付券,訂單付券明細,優惠券。現要求查訂單付券資訊包含付券明細資訊(集合),付券明細包含優惠券資訊。這裡類欄位簡單寫,xml詳細按照實際操作寫。主要為了說明結果巢狀的優劣。xml處理如下:

這裡通過左連線查詢出所有結果,然後在用resultMap,collection,association把查詢出的結果按要求一個個巢狀。這種結果巢狀的缺點很明顯,sql語句和resultMap寫的有點麻煩,但是優勢就是一條sql就能解決所有。至於不用例一的條件巢狀的原因是,如果集合長度是N,那得進行1+N+N次查詢,資料庫效能消耗會很大。

簡單理解mybatis的一級快取和二級快取:mybatis的一級快取的作用域是一次sqlSession,其快取原理是一個map,以sql作為key。二級快取的作用域是application級別,但並不是簡單地對整個Application就只有一個Cache快取物件,它將快取劃分的更細為Mapper級別的,即每一個Mapper都可以擁有一個Cache物件。在sqlSession會話中將查詢結果放到Cache物件中。二級快取可以整合第三方快取框架、自定義的Cahce介面。

一級快取和二級快取使用順序:二級------》一級----------》db

延遲載入在一對一association、一對多collection關聯的條件巢狀查詢時候使用。先從單表查詢、需要時再從關聯表去關聯查詢,提高資料庫效能,因為查詢單表要比關聯查詢多張錶速度要快。