mybati mapper 指定数据源
时间: 2023-08-31 09:06:03 浏览: 227
在 MyBatis 中,可以使用多数据源进行数据库访问。在 Mapper 中指定数据源的方法有两种:
1. 在 `SqlSessionFactory` 中配置多个数据源,并在 Mapper 中通过 `@Qualifier` 注解指定数据源。示例如下:
```java
@Mapper
@Qualifier("dataSource1")
public interface UserMapper1 {
// ...
}
@Mapper
@Qualifier("dataSource2")
public interface UserMapper2 {
// ...
}
```
2. 在 Mapper XML 文件中使用 `${}` 占位符来指定数据源。示例如下:
```xml
<mapper namespace="com.example.UserMapper">
<select id="selectUser" parameterType="java.lang.Long" resultType="com.example.User">
select * from user where id = #{id}
</select>
<select id="selectUserFromDataSource2" parameterType="java.lang.Long" resultType="com.example.User"
dataSource="${dataSource2}">
select * from user where id = #{id}
</select>
</mapper>
```
第一种方法适用于在代码中动态切换数据源,需要在 `SqlSessionFactory` 中配置多个数据源,并在 Mapper 中通过 `@Qualifier` 注解指定要使用的数据源。
第二种方法适用于固定使用某个数据源,可以在 Mapper XML 文件中直接指定数据源。需要在 `SqlSessionFactory` 中配置多个数据源,并在 Mapper XML 文件中使用 `${}` 占位符来指定要使用的数据源。
需要注意的是,对于第二种方法,需要在 MyBatis 的配置文件中指定占位符的解析器,例如:
```xml
<configuration>
<properties>
<property name="dataSource1" value="dataSource1"/>
<property name="dataSource2" value="dataSource2"/>
</properties>
<typeAliases>
<typeAlias type="com.example.User" alias="User"/>
</typeAliases>
<mappers>
<mapper resource="com/example/UserMapper.xml"/>
</mappers>
<objectFactory type="org.apache.ibatis.builder.ExampleObjectFactory">
<property name="properties">
<value>dataSource=${dataSource1}</value>
</property>
</objectFactory>
<objectWrapperFactory type="org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory"/>
<settings>
<setting name="lazyLoadingEnabled" value="false"/>
</settings>
</configuration>
```
在 `objectFactory` 中指定了默认的数据源 `${dataSource1}`,如果需要使用其他数据源,可以在 Mapper XML 文件中使用 `${}` 占位符来指定,例如 `dataSource="${dataSource2}"`。
阅读全文