天天看點

MyBatis延遲加載及在spring中內建配置



當你要使用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全局屬性配置檔案。