在Spring Boot中配置多数据源并使用MyBatis访问数据库的步骤如下:

  1. 添加依赖

在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>4.0.3</version>
</dependency>
  1. 配置数据源

在application.properties中配置多个数据源,例如:

# 数据源1
spring.datasource.url=jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 数据源2
spring.datasource.db2.url=jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
spring.datasource.db2.username=root
spring.datasource.db2.password=root
spring.datasource.db2.driver-class-name=com.mysql.cj.jdbc.Driver
  1. 配置Mapper

创建Mapper接口和对应的XML文件,例如:

@Mapper
public interface UserMapper {
    @Select("select * from user")
    List<User> getAllUsers();
}
<mapper namespace="com.example.demo.mapper.UserMapper">
    <select id="getAllUsers" resultType="com.example.demo.entity.User">
        select * from user
    </select>
</mapper>
  1. 配置SqlSessionFactory

在配置类中配置SqlSessionFactory,例如:

@Configuration
@MapperScan(basePackages = "com.example.demo.mapper", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class DataSourceConfig {
    @Bean(name = "db1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource db1DataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "db2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db2")
    public DataSource db2DataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "db1SqlSessionFactory")
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "db2SqlSessionFactory")
    public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "db1SqlSessionTemplate")
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean(name = "db2SqlSessionTemplate")
    public SqlSessionTemplate db2SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
  1. 使用Mapper访问数据库

在service中注入对应的Mapper和SqlSessionTemplate,例如:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    @Autowired
    @Qualifier("db1SqlSessionTemplate")
    private SqlSessionTemplate db1SqlSessionTemplate;

    @Autowired
    @Qualifier("db2SqlSessionTemplate")
    private SqlSessionTemplate db2SqlSessionTemplate;

    public List<User> getAllUsersFromDb1() {
        return db1SqlSessionTemplate.getMapper(UserMapper.class).getAllUsers();
    }

    public List<User> getAllUsersFromDb2() {
        return db2SqlSessionTemplate.getMapper(UserMapper.class).getAllUsers();
    }
}

这样就可以在一个应用程序中配置多个数据源并使用MyBatis访问数据库了

springboot如何配置多数据源mybatis使用mapper访问数据库

原文地址: https://www.cveoy.top/t/topic/ge7n 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录