當你要使用one to one,many to one 就會碰到n+1的問題。很明顯,對象之間關聯很多有a關聯b,b關聯c,c關聯a這樣的關系,如果不是采用延遲加載,很容易一下在出現成千上萬對象,造成n+1的問題。
而mybatis 設定延遲加載主要2個屬性配置:
<?xml version="1.0" encoding="utf-8"?>
<!doctype configuration
public "-//ibatis.apache.org//dtd config 3.0//en" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<settings>
<setting name="lazyloadingenabled" value="false"/>
<setting name="aggressivelazyloading" value="true"/>
</settings>
</configuration>
lazyloadingenabled:true使用延遲加載,false禁用延遲加載。預設為true
aggressivelazyloading:true啟用時,當延遲加載開啟時通路對象中一個懶對象屬性時,将完全加載這個對象的所有懶對象屬性。false,當延遲加載時,按需加載對象屬性(即通路對象中一個懶對象屬性,不會加載對象中其他的懶對象屬性)。預設為true
加載所有懶對象
<setting name="lazyloadingenabled" value="true"/>
</configuration>
按需加載對象屬性
<setting name="aggressivelazyloading" value="false"/>
</configuration>
對繼承spring配置如下:
<bean id="sqlsessionfactory"
class="org.mybatis.spring.sqlsessionfactorybean">
<property name="configlocation" value="classpath:setting.xml"/>
<property name="datasource" ref="datasource" />
</bean>
setting.xml是mybatis全局屬性配置檔案。