mybatis的xml文件是如何被spring加载的

[复制链接]
发表于 2025-4-1 17:08:43 | 显示全部楼层 |阅读模式

在 Spring 集成 MyBatis 的场景中,MyBatis 的 XML 文件(包括 MyBatis 配置文件和 Mapper 映射文件)是通过 Spring 的配置机制加载的。以下是具体的加载过程:

1. 配置 SqlSessionFactoryBean

在 Spring 的配置文件或 Java 配置类中,需要定义一个 SqlSessionFactoryBean 的 Bean。SqlSessionFactoryBean 是 MyBatis 和 Spring 集成的核心组件之一,它负责加载 MyBatis 的配置文件和映射文件,并构建 SqlSessionFactory

使用 XML 配置文件

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:mybatis-config.xml" />
    <property name="mapperLocations" value="classpath*:com/example/mapper/*.xml" />
</bean>

使用 Java 配置类

@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(dataSource);
    sessionFactory.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
    sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:com/example/mapper/*.xml"));
    return sessionFactory.getObject();
}

2. 加载 MyBatis 配置文件

SqlSessionFactoryBean 会加载指定路径下的 MyBatis 配置文件(mybatis-config.xml)。该文件中定义了数据库连接信息、事务管理方式、环境配置等。

3. 加载 Mapper 映射文件

SqlSessionFactoryBean 会根据 mapperLocations 属性指定的路径加载所有的 Mapper 映射文件(*.xml)。这些映射文件中定义了 SQL 语句以及输入输出参数的映射关系。

4. 构建 SqlSessionFactory

SqlSessionFactoryBean 会解析 MyBatis 配置文件和映射文件的内容,并将它们注册到 MyBatis 的 Configuration 对象中。然后,它会使用这个 Configuration 对象来构建 SqlSessionFactory

5. 扫描 Mapper 接口

Spring 会通过 MapperScannerConfigurer 扫描指定包路径下的 Mapper 接口,并为每个接口生成对应的代理对象。

使用 XML 配置文件

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

使用 Java 配置类

@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
    MapperScannerConfigurer configurer = new MapperScannerConfigurer();
    configurer.setBasePackage("com.example.mapper");
    configurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
    return configurer;
}

6. 动态代理机制

当调用 Mapper 接口的方法时,Spring 会通过 MyBatis 的动态代理机制调用底层的 SqlSession 来执行 SQL 语句。MapperProxy 会拦截方法调用,并通过 SqlSession 执行对应的 SQL 语句。

总结

在 Spring 集成 MyBatis 的场景中,MyBatis 的 XML 文件是通过 SqlSessionFactoryBean 加载的。SqlSessionFactoryBean 会加载 MyBatis 配置文件和映射文件,并构建 SqlSessionFactory。然后,MapperScannerConfigurer 会扫描 Mapper 接口,并为每个接口生成代理对象。

GMT+8, 2025-4-19 08:48 , Processed in 0.067764 second(s), 35 queries Archiver|手机版|小黑屋|Attic ( 京ICP备2020048627号 )

快速回复 返回顶部 返回列表