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

MyBatis 與 Spring 整合實戰(三):SqlSessionFactoryBean 與 Mapper 掃描

     編輯:Java 綜合教學

MyBatis 與 Spring 整合實戰(三):SqlSessionFactoryBean 與 Mapper 掃描

整合核心思路

將數據源管理權交給 Spring,MyBatis 僅保留映射配置。關鍵組件:DataSource、SqlSessionFactoryBean、MapperFactoryBean(或掃描器)。

1. MyBatis 配置精簡

MybatisConfiguration.xml 僅保留類型別名與映射文件引用:

<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

<!-- 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"/>
</bean>

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

3. 關鍵屬性解析

Bean關鍵屬性作用
SqlSessionFactoryBeandataSource注入 Spring 管理的數據源
configLocation指向 MyBatis 核心配置文件
mapperLocations若 config 中未配 mappers,此處指定映射文件(支持通配符)
MapperFactoryBeanmapperInterfaceMapper 接口全限定名,生成動態代理
sqlSessionFactory引用上方工廠 Bean

4. 測試驗證

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring-application.xml");
IMessageOperation mapper = ctx.getBean("messageMapper", IMessageOperation.class);
Message msg = mapper.selectMessageById("2");
System.out.println(msg);

5. 痛點與下一步優化

每個 Mapper 都需聲明一個 MapperFactoryBean,Mapper 多時極其繁瑣。下一篇將介紹 MapperScannerConfigurer 自動掃描包路徑,批量註冊代理,實現零配置整合。

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