MyBatis 的 Mapper 接口的包和 XML 映射配置文件的包不一致时,配置方法如下

当 MyBatis 的 Mapper 接口的包和 XML 映射配置文件的包不一致时,你仍然可以使用 `MapperScannerConfigurer` 来分别指定接口的包和 XML 映射文件的包。从 MyBatis 3 开始,XML 映射文件不再是必须与对应的 Mapper 接口在同一个包中。

以下是如何配置这种情况的步骤:

1. **指定 Mapper 接口的包**:
   使用 `basePackage` 属性指定包含 Mapper 接口的包路径。

2. **指定 XML 映射文件的包**:
   使用 `sqlSessionFactory` 的 `mapperLocations` 属性指定 XML 映射文件的位置。如果你使用 Spring 配置文件来配置 MyBatis,可以这样做:

```xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:mybatis-config.xml" />
    <!-- 指定 XML 映射文件的位置 -->
    <property name="mapperLocations" value="classpath*:com/zhang/mapper/*.xml" />
</bean>

<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 指定 Mapper 接口的包 -->
    <property name="basePackage" value="com.zhang.dao" />
    <!-- 指定 sqlSessionFactory -->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
```

在这个例子中,`sqlSessionFactory` 负责查找和加载 `com.zhang.mapper` 包下的 XML 映射文件,而 `mapperScannerConfigurer` 则扫描 `com.zhang.dao` 包下的 Mapper 接口。

3. **使用注解**:
   如果你更倾向于使用注解而不是 XML 配置,可以在 Spring Boot 应用中使用 `@MapperScan` 注解来指定 Mapper 接口的包路径,并在 `SqlSessionFactory` 配置中指定 XML 映射文件的位置:

```java
@Configuration
@MapperScan("com.zhang.dao") // 指定 Mapper 接口的包
public class MyBatisConfig {

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
        factory.setDataSource(dataSource);
        factory.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
        // 指定 XML 映射文件的位置
        factory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources("classpath*:com/zhang/mapper/*.xml"));
        return factory.getObject();
    }

    // 其他配置...
}
```

使用这种方法,即使 Mapper 接口和 XML 映射文件不在同一个包中,MyBatis 也能够正确地将它们关联起来。

确保在 `MapperScannerConfigurer` 中没有指定 `mapperLocations`,因为这是在 `SqlSessionFactoryBean` 中配置的。`MapperScannerConfigurer` 的任务是发现和注册 Mapper 接口,而 `SqlSessionFactoryBean` 的任务是创建 `SqlSessionFactory` 实例并加载 XML 映射文件。
 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis 是一款使用 XML 或注解配置的持久层框架,它可以自动化地将数据库中的数据映射Java 对象中。在 MyBatis 中,mappermapper.xml 是配对使用的,其中 mapper接口,而 mapper.xml映射配置文件mapper 接口中定义了数据库操作的方法,而 mapper.xml 中则定义了这些方法的 SQL 语句以及参数映射规则、结果集映射规则等。 下面是一个简单的例子: 1. 定义 mapper 接口 ```java public interface UserMapper { User selectUserById(Integer id); } ``` 2. 定义 mapper.xml 映射配置文件 ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.UserMapper"> <resultMap id="userResultMap" type="com.example.User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> </resultMap> <select id="selectUserById" resultMap="userResultMap"> SELECT * FROM user WHERE id = #{id} </select> </mapper> ``` 上述代码中,namespace 属性指定了 mapper 接口的全限定名,resultMap 标签定义了一个结果集映射规则,select 标签定义了一个查询操作,其中 id 属性指定了 mapper 接口中的方法名,resultMap 属性指定了结果集映射规则的 id。 3. 在 MyBatis 配置文件中引入 mapper.xml ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <mappers> <mapper resource="com/example/UserMapper.xml"/> </mappers> </configuration> ``` 上述代码中,mapper 标签指定了映射配置文件的位置。 这样就完成了 mappermapper.xml配置。在代码中调用 selectUserById 方法MyBatis 会根据 mapper.xml 中的配置自动生成 SQL 语句,并将查询结果映射到 User 对象中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值