首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

MyBatis 與 Spring 整合實戰(三):SqlSessionFactoryBean、MapperFactoryBean 與掃描器配置

     編輯:Java 相關知識

整合依賴

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.1.1</version>
</dependency>

1. MyBatis 配置精簡

整合後,數據源、事務管理交給 Spring,MyBatis 配置僅保留別名與映射檔:

<configuration>
    <typeAliases>
        <typeAlias alias="Message" type="com.cn.imooc.entity.Message"/>
    </typeAliases>
    <mappers>
        <mapper resource="com/cn/mappers/message.xml"/>
    </mappers>
</configuration>

2. Spring 配置核心 Bean

<beans ...>
    <!-- 1. 數據源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/weixin?useUnicode=true&characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <!-- 2. SqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:MybatisConfiguration.xml"/>
        <!-- 若 MyBatis 配置未掃描映射檔,可在此指定 -->
        <!-- <property name="mapperLocations" value="classpath:com/cn/mappers/*.xml"/> -->
    </bean>

    <!-- 3. MapperFactoryBean:為單個介面創建代理 -->
    <bean id="messageMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="com.cn.inter.IMessageOperation"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
</beans>

關鍵屬性說明

  • SqlSessionFactoryBean:替代原生 SqlSessionFactoryBuilder,整合 Spring 數據源與事務。
  • configLocation:指定 MyBatis 核心配置文件。
  • mapperLocations:批量掃描映射檔(Ant 路徑),若 MyBatis 配置已包含則可省略。
  • MapperFactoryBean:為每個 Mapper 介面顯式定義 Bean,適用於少量 Mapper。

3. 測試驗證

public class TestSpringAndMybatis {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring-application.xml");
        IMessageOperation mapper = ctx.getBean("messageMapper", IMessageOperation.class);
        Message msg = mapper.selectMessageById("2");
        System.out.println(msg);
    }
}

4. 進階:MapperScannerConfigurer(推薦生產使用)

手動為每個 Mapper 寫 MapperFactoryBean 過於繁瑣。Spring 提供掃描器自動掃描包下所有介面並註冊代理:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.cn.inter"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
  • basePackage:掃描的基礎包,所有介面自動成為 Mapper Bean(Bean 名稱 = 介面簡名首字母小寫)。
  • 無需再定義 MapperFactoryBean。
  • 可配合 annotation 指定註解過濾。

5. 事務管理整合

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

Service 層加 @Transactional 即可聲明式事務。

總結

MyBatis-Spring 整合核心三步:

  1. 配置 Spring DataSource。
  2. 定義 SqlSessionFactoryBean 關聯數據源與 MyBatis 配置。
  3. 使用 MapperScannerConfigurer 自動掃描註冊 Mapper 代理。

此方式實現了數據源統一管理、事務無縫整合、Mapper 零配置註冊,是企業級應用標準做法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved