日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

SqlSessionFactoryBean的构建流程

發(fā)布時間:2023/11/27 生活经验 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SqlSessionFactoryBean的构建流程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目的

此文的主旨在于梳理SqlSessionFactoryBean的初始流程,不拘泥于實現(xiàn)細節(jié)。

使用

SqlSessionFactoryBean的主要作用便是用來創(chuàng)建SqlSessionFactory,在它的構建過程中會解析MyBatis所需要的配置文件,將所有配置都封裝到Configuration類中,最后返回SqlSessionFactory實例SqlSessionFactoryBean實現(xiàn)了Spring中兩個用于初始化Bean的接口FactoryBeanInitializingBean.

InitializingBean定義如下

public interface InitializingBean {/*** 此方法在BeanFactory設置了Bean配置里的所有屬性后執(zhí)行。*/void afterPropertiesSet() throws Exception;
}

我們一般在XML中都會有這么一段配置,如下:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 注入連接池 --><property name="dataSource" ref="dataSource"/><!--主配置 --><property name="configuration"><bean class="org.apache.ibatis.session.Configuration"><property name="mapUnderscoreToCamelCase" value="true"/></bean></property><!-- 加載mybatis映射文件 --><property name="mapperLocations" value="classpath:mappers/*.xml"/>
</bean>

上述配置的作用就是讓容器創(chuàng)建一個ID為sqlSessionFactorySqlSessionFactoryBean實例,并且為實例指定了datasource屬性,手動指定了主配置對象,開啟MyBatis下劃線轉(zhuǎn)駝峰的屬性配置,并且指定映射文件所在的位置。

注:
雖然指定的是SqlSessionFactoryBean實例,但是因為繼承了FactoryBean接口,因此我們從容器拿到的對象實際上是getObject方法返回的對象,即SqlSessionFactory實例。

創(chuàng)建流程

首先自不用說,Spring會創(chuàng)建SqlSessionFactoryBean實例,設置配置的所有屬性,這是第一步,接下來便會走afterPropertiesSet()方法。

@Override
public void afterPropertiesSet() throws Exception {// 檢查數(shù)據(jù)源notNull(dataSource, "Property 'dataSource' is required");// 檢查SqlSessionFactoryBuilder, 已經(jīng)在構造方法里初始化notNull(sqlSessionFactoryBuilder, "Property 'sqlSessionFactoryBuilder' is required");// configuration實例與configLocation只能有一個state((configuration == null && configLocation == null) || !(configuration != null &&          configLocation != null),"Property 'configuration' and 'configLocation' can not specified with together");// 解析配置文件,創(chuàng)建SqlSessionFactory。這屬于MyBatis本身的內(nèi)容,不再展開說明。this.sqlSessionFactory = buildSqlSessionFactory();
}

創(chuàng)建SqlSessionFactory的過程與MyBatis不同的點主要在與transactionFactory,在創(chuàng)建事務工廠時不再使用MyBatis自帶的JdbcTransaction類,而是使用SpringManagedTransactionFactory這個新的事務工廠類,這個事務獲取到的連接全部來自于Spring管理,這樣把事務全權交給Spring管理,而MyBatis本身不再涉及事務管理。如果在使用Spring時沒有配置(使用)事務,那么獲取到的連接取決于DataSource,無論拿到的連接是自動提交還是手動提交,MyBatis每一次方法調(diào)用都會視情況提交或回滾。當然對于自動提交而言,MyBatis的commit或者rollbakc是不會調(diào)用conn.commit()conn.rollback

在經(jīng)過afterPropertiesSet方法后,SqlSessionFactory實例便創(chuàng)建完畢。需要使用SqlSessionFactory實例便會調(diào)用getObject方法。

@Override
public SqlSessionFactory getObject() throws Exception {if (this.sqlSessionFactory == null) {afterPropertiesSet();}return this.sqlSessionFactory;
}

轉(zhuǎn)載于:https://www.cnblogs.com/wt20/p/10470872.html

總結

以上是生活随笔為你收集整理的SqlSessionFactoryBean的构建流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。