MyBatis中的延遲加載和立即加載可以通過配置來實現。延遲加載是指在需要獲取相關對象數據時才去查詢數據庫,而立即加載是在主查詢時就一并獲取相關對象數據。
延遲加載可以通過配置lazyLoadingEnabled
屬性來實現,默認是開啟的。當延遲加載開啟時,可以在mapper文件中使用association
和collection
標簽來指定需要延遲加載的對象。例如:
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<association property="dept" column="dept_id" javaType="Dept" select="selectDeptById" fetchType="lazy"/>
</resultMap>
在這個例子中,Dept
對象將會被延遲加載。
立即加載可以通過配置lazyLoadingEnabled
屬性為false來實現,或者在需要立即加載的地方使用fetchType="eager"
來指定。例如:
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<association property="dept" column="dept_id" javaType="Dept" select="selectDeptById" fetchType="eager"/>
</resultMap>
在這個例子中,Dept
對象將會被立即加載。
總的來說,延遲加載可以減少不必要的數據庫查詢,提高性能,而立即加載則可以簡化代碼邏輯。根據具體的需求和性能要求來選擇使用延遲加載還是立即加載。