將數據源管理權交給 Spring,MyBatis 僅保留映射配置。關鍵組件:DataSource、SqlSessionFactoryBean、MapperFactoryBean(或掃描器)。
MybatisConfiguration.xml 僅保留類型別名與映射文件引用:
<configuration>
<typeAliases>
<typeAlias alias="Message" type="com.cn.imooc.entity.Message"/>
</typeAliases>
<mappers>
<mapper resource="com/cn/mappers/message.xml"/>
</mappers>
</configuration>
<!-- 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>
| Bean | 關鍵屬性 | 作用 |
|---|---|---|
| SqlSessionFactoryBean | dataSource | 注入 Spring 管理的數據源 |
| configLocation | 指向 MyBatis 核心配置文件 | |
| mapperLocations | 若 config 中未配 mappers,此處指定映射文件(支持通配符) | |
| MapperFactoryBean | mapperInterface | Mapper 接口全限定名,生成動態代理 |
| sqlSessionFactory | 引用上方工廠 Bean |
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring-application.xml");
IMessageOperation mapper = ctx.getBean("messageMapper", IMessageOperation.class);
Message msg = mapper.selectMessageById("2");
System.out.println(msg);
每個 Mapper 都需聲明一個 MapperFactoryBean,Mapper 多時極其繁瑣。下一篇將介紹 MapperScannerConfigurer 自動掃描包路徑,批量註冊代理,實現零配置整合。