mybatis總概覽(8)(spring和mybatis整合,dao和mapper自動掃描模式)


1  spring和mybatis整合

1.1     整合思路

需要spring通過單例方式管理SqlSessionFactory。
spring和mybatis整合生成代理對象,使用SqlSessionFactory創建SqlSession。(spring和mybatis整合自動完成)
持久層的mapper都需要由spring進行管理。

1.2     整合環境

創建一個新的java工程(接近實際開發的工程結構)

主要3部分jar包:

1,mybatis3.2.7相關的jar包
2,spring3.2.0相關的jar包
3,mybatis和spring的整合包(mybatis-spring-1.2.2.jar):早期ibatis和spring整合是由spring官方提供,現在mybatis和spring整合由mybatis提供。

全部jar包:

1.3   sqlSessionFactory

在applicationContext.xml配置sqlSessionFactory和數據源(sqlSessionFactory類在mybatis-spring的整合包(mybatis-spring-1.2.2.jar)下。)

 (ps:包括幾個內容:1,加載資源標簽;2,基礎數據源類(BasicDataSource);3,sql會話工廠類(SqlSessionFactoryBean)(和只使用mybatis不是同一個類

<!-- 加載配置文件 -->
    <context:property-placeholder location="classpath:db.properties" />

    <!-- 數據源,使用dbcp -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="10" />
        <property name="maxIdle" value="5" />
    </bean>

    <!-- sqlSessinFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 加載mybatis的配置文件 -->
        <property name="configLocation" value="mybatis/SqlMapConfig.xml" />
        <!-- 數據源 -->
        <property name="dataSource" ref="dataSource" />
    </bean>

1.4    原始dao開發(和spring整合后)

1.4.1     User.xml

在SqlMapconfig.xml中加載User.xml

 

1.4.2     dao(實現類繼承SqlSessionDaoSupport)

 

dao接口實現類需要注入SqlSessoinFactory,通過spring進行注入。

這里spring聲明配置方式,配置dao的bean:

讓UserDaoImpl實現類繼承SqlSessionDaoSupport(因為它提供了注入需要的屬性(sqlSessionFactory工廠類)的set方法)

1.4.3     配置dao

在applicationContext.xml中配置dao。

 

(ps:dao模式,可以通過注解的方式,省略需要配置多個bean的情況)

1.4.4     測試程序

 

1.5     mapper代理開發

1.5.1     mapper.xml和mapper.java

 

1.5.2     通過MapperFactoryBean創建代理對象

(ps:mapper代理的方式,只定義了接口(自動生成的實現),使用spring框架要想得到代理實現,需要其提供的MapperFactoryBean類得到mapper代理對象)

 

此方法問題:

需要針對每個mapper進行配置,麻煩。

1.5.3     通過MapperScannerConfigurer進行mapper掃描(建議使用)

(ps:注入屬性名稱用sqlSessionFactoryBeanName而不是sqlSessionFactory是因為這個兩個屬性賦值的時機是不一樣的,
   上面bean那個應該是被動調用執行,當前這個bean是自動掃描
注意:sqlSessionFactoryBeanName要用value而不用ref.

在mybatis-spring1.1.0以前,
是通過<property name="sqlSessionFactory" ref="sqlSessionFactory"/>將SqlSessionFactory對象注入到sqlSessionFactory,
這樣做可能會有一個問題,就是在初始化MyBatis時,jdbc.properties文件還沒被加載進來,
dataSource的屬性值沒有被替換,就開始構造sqlSessionFactory類,屬性值就會加載失敗。

在1.1.0以后,
MapperScannerConfigure提供了String類型的sqlSessionFactoryBeanName,這樣將bean name注入到sqlSessionFactoryBeanName,
這樣就會等到spring初始化完成后,再構建sqlSessionFactory。

(ps:spring自動掃描mapper接口和對應xml配置,那么mybatis中的對應映射(或者自動掃描包)就可以去掉了)

1.5.4     測試代碼

 


免責聲明!

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



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