springboot如何配置多数据源mybatis使用mapper访问数据库
在Spring Boot中配置多数据源并使用MyBatis访问数据库的步骤如下:
- 添加依赖
在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>
- 配置数据源
在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
- 配置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>
- 配置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);
}
}
- 使用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访问数据库了
原文地址: https://www.cveoy.top/t/topic/ge7n 著作权归作者所有。请勿转载和采集!