mybatis之sqlSession無需開發人員close


根據mybatis官方文檔,建議對sqlSession進行如下操作

 

SqlSession session = sqlSessionFactory.openSession();try{// following 3 lines pseudocod for "doing some work"
    session.insert(...);
    session.update(...);
    session.delete(...);
    session.commit();}finally{
    session.close();}

每個操作都進行打開和關閉,而且都是重復性操作。

 

於是mybatis-3.0.6采用動態代理實現的aop非常好的解決了上面的問題。

大體實現方式如下:

1.在applicationContext.xml中配置

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation">
            <value>classpath:mybatisConfig.xml</value>
        </property>
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>

2.在具體的使用類中執行如下操作,即可。

int identifier = sqlSession.insert(statement, object);

大體原理:

執行sqlSession.insert及執行SqlSessionTemplate.insert,其內部調用sqlSessionProxy.insert,sqlSessionProxy是一個動態代理器,其調用處理器是SqlSessionInterceptor,該處理器先getSqlSession,然后執行insert,最后closeSqlSession。

不明白的同學可直接查看mybatis-3.0.6源碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM