1.在application.properties中配置数据连接参数
spring.datasource.test1.jdbc-url=jdbc:sqlserver://localhost:1433;databasename=AA
spring.datasource.test1.username=root
spring.datasource.test1.password=root
spring.datasource.test1.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.test2.jdbc-url=jdbc:sqlserver://localhost:1433;databasename=AA_Sq
spring.datasource.test2.username=root
spring.datasource.test2.password=root
spring.datasource.test2.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver |
2.配置数据源
AA数据库的配置
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
//basePackages为dao层接口(用来与数据库做交互)所在的包名
@Configuration
@MapperScan(basePackages = {"com.xx.sourceone.mapper"},sqlSessionFactoryRef = "test1SqlSessionFactory")
public class DataByAA {
// @ConfigurationProperties注解的作用就是从application.properties中读取以 spring.datasource.test1 开头的那些配置,并将其设置为数据源的配置
@Bean(name = "test1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource testDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "test1SqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource)throws Exception{
MybatisSqlSessionFactoryBean bean=new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
// 路径地址为mapper.xml所在的位置,这个xml是配置文件,处在resource里面,主要用来写查询语句
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapperone/**.xml"));
return bean.getObject();
}
@Bean(name = "test1TransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "test1SqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
} |
AA_Sq数据库的配置
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = {"com.xx.sourcetwo.mapper"},sqlSessionFactoryRef = "test2SqlSessionFactory")
public class DataByAASq {
@Bean(name = "test2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test2")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "test2SqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mappertwo/**.xml"));
return bean.getObject();
}
@Bean(name = "test2TransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "test2SqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
} |
项目结构如下图
3.controller 层
访问AA数据库
@RestController
public class XxWebController {
@Autowired
XxWebMapper xxWebMapper;
@PostMapping("/api/list")
public Result getList(String sjname){
Map<String,Object> map = new HashMap<>();
try {
XxWeb sjName = xxWebMapper.selectOne(new QueryWrapper<XxWeb>().eq("SjName", sjname));
map.put("datas",sjName);
return Result.ok(map);
}catch (Exception e){
return Result.fail(901);
}
}
} |
访问AA——Sq数据库
@RestController
public class RfgcglController {
@Autowired
UserMapper userMapper;
@PostMapping("/api2/list")
public Result getList(String yhmc){
Map<String,Object> map = new HashMap<>();
try {
User yhmc1 = userMapper.selectOne(new QueryWrapper<User>().eq("yhmc", yhmc));
map.put("datas",yhmc1);
return Result.ok(map);
}catch (Exception e){
e.printStackTrace();
return Result.fail(901);
}
}
} |
配置多数据源时,通过查找mybatis-plus官方文档得知,不能使用原生的 SqlSessionFactory
注意红色标注的代码,如果mybatisplus配置多数据源时使用的SqlSessionFactory不是MybatisSqlSessionFactoryBean,会报错Invalid bound statement (not found);如果mybatisplus配置多数据源时不设置扫描XML文件的路径,也会报错Invalid bound statement (not found);如果mybatisplus配置多数据源时配置扫描XML文件的路径不正确,还会报错Invalid bound statement (not found)