mybatis-plus多数据源及其原理
注意使用mybatis-plus版本为3.+的,不是2.+,请注意
参考官方文档:https://baomidou.com/pages/a61e1b/#%E6%96%87%E6%A1%A3-documentation
创建一个demo项目,引入maven依赖坐标
<!--数据库-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
application.yml的数据源部分配置
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
master:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://127.0.0.1:1433;databaseName=xxx;characterEncoding=utf8
username: sa
password: 123456
slave_1:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/xxx?zeroDateTimeBehavior=convertToNull&useSSL=false
username: root
password: 123456
省略model层,省略dao层,省略mapper细节文件
service层使用master数据源查询数据,加@DS(“master”)注解到service实现类上,也可以加到mapper接口上,值就是配置的数据源名称master或者slave_1
@Service
@DS("master")
public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, Dictionary> implements DictionaryService {
@Override
public List<Map<String, Object>> getPage(int page, int limit, Integer checkTypeId, String checkStandard) {
return null;
}
}
service层使用slave1数据源查询数据
@Service
@DS("slave_1")
public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements ItemService {
@Override
public List<Map<String, Object>> getPage(int pageStart, int limit, Integer checkTypeId, String checkStandard) {
Page<Object> objectPage = new Page<>();
IPage<Map<String, Object>> page = new Page<>(pageStart, limit);
List<Map<String, Object>> page1 = baseMapper.listPageBy(page, checkTypeId, checkStandard);
return page1;
}
}
创建单元测试
@SpringBootTest
@RunWith(SpringRunner.class)
public class DualDBTest {
@Resource
private ItemService itemService;
@Resource
private DictionaryService dictionaryService;
//数据源master测试
@Test
public void master() {
List<Dictionary> allDictList = dictionaryService.list();
System.out.println("查询条数:" + allDictList.size());
}
//数据源slave_1测试
@Test
public void slave1() {
List<Item> allItemList = itemService.list();
System.out.println("查询条数:" + allItemList.size());
}
@Test
public void db1_2() {
// master
List<Dictionary> allDictList = dictionaryService.list();
System.out.println("查询条数:" + allDictList.size());
System.out.println("=========漂亮的分割线=========");
//slave
List<Item> allItemList = itemService.list();
System.out.println("查询条数:" + allItemList.size());
}
}
单元测试结果