Mybatis-plus 官网:https://baomidou.com/
要链接那种数据库,直接在配置文件中配置数据库信息就行。
整体项目目录:
- 创建数据库
create table mysql_db1.user(
id int primary key auto_increment,
name varchar(50) default '' comment 'name',
moblie varchar(11) default '' comment 'mobile'
);
create table mysql_db2.user(
id int primary key auto_increment,
name varchar(50) default '' comment 'name',
moblie varchar(11) default '' comment 'mobile'
);
- 新建Springboot 项目(不在赘述)
- 导入依赖 pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.13-SNSAPSHOT</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
- 启动类
@SpringBootApplication
public class DynamicDataSourceApplication {
public static void main(String[] args) {
SpringApplication.run(DynamicDataSourceApplication.class,args);
}
}
- 配置文件
扩展配置文件 application.properties(整体项目目录截图中没有此文件,可以在application.yml中直接设置,此配置文件可有可无)
siyuan.datasource.db1.type=com.alibaba.druid.pool.DruidDataSource
siyuan.datasource.db1.driverClassName=com.mysql.cj.jdbc.Driver
siyuan.datasource.db1.url=jdbc:mysql://localhost:3306/mysql_db1?serverTimezone=GMT%2B8
siyuan.datasource.db1.username=root
siyuan.datasource.db1.password=12345678
siyuan.datasource.db2.type=com.alibaba.druid.pool.DruidDataSource
siyuan.datasource.db2.driverClassName=com.mysql.cj.jdbc.Driver
siyuan.datasource.db2.url=jdbc:mysql://localhost:3306/mysql_db2?serverTimezone=GMT%2B8
siyuan.datasource.db2.username=root
siyuan.datasource.db2.password=12345678
主要配置文件 application.yml
server:
port: 10000
spring:
datasource:
dynamic:
# 设置默认的数据源或者数据源组,默认值即为master
primary: db1
# 严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
strict: true
datasource:
db1:
type: ${siyuan.datasource.db1.type}
url: ${siyuan.datasource.db1.url}
username: ${siyuan.datasource.db1.username}
password: ${siyuan.datasource.db1.password}
driver-class-name: ${siyuan.datasource.db1.driverClassName}
db2:
type: ${siyuan.datasource.db2.type}
url: ${siyuan.datasource.db2.url}
username: ${siyuan.datasource.db2.username}
password: ${siyuan.datasource.db2.password}
driver-class-name: ${siyuan.datasource.db2.driverClassName}
- 实体类
@Data
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
private String mobile;
}
- Mapper.java
// db1 对应配置文件中的db1,可改
//@DS("db1")
@Mapper
public interface Db1UserMapper extends BaseMapper<User> {
}
// db2 对应配置文件中的db2,可改
@DS("db2")
@Mapper
public interface Db2UserMapper extends BaseMapper<User> {
}
- 测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DynamicDataSourceApplication.class)
public class DynamicDataSourceTest {
@Autowired
private Db1UserMapper db1UserMapper;
@Autowired
private Db2UserMapper db2UserMapper;
/**
*
*/
@Test
public void add(){
User db1User = new User();
db1User.setName("db1name");
db1User.setMobile("11111111111");
db1UserMapper.insert(db1User);
User db2User = new User();
db2User.setName("db2name");
db2User.setMobile("22222222222");
db2UserMapper.insert(db2User);
this.select();
}
/**
*
*/
@Test
public void select(){
List<User> users = db1UserMapper.selectList(null);
System.out.println(users);
users = db2UserMapper.selectList(null);
System.out.println(users);
}
}
运行并查看数据库
Mybatis-plus 约定:
- 本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
- 配置文件所有以下划线
_
分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。 - 切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。
- 默认的数据源名称为 master ,你可以通过
spring.datasource.dynamic.primary
修改。 - 方法上的注解优先于类上注解。
- DS支持继承抽象类上的DS,暂不支持继承接口上的DS。
数据源的配置
# 多主多从 纯粹多库(记得设置primary) 混合配置
spring: spring: spring:
datasource: datasource: datasource:
dynamic: dynamic: dynamic:
datasource: datasource: datasource:
master_1: mysql: master:
master_2: oracle: slave_1:
slave_1: sqlserver: slave_2:
slave_2: postgresql: oracle_1:
slave_3: h2: oracle_2:
使用 @DS 切换数据源。
@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。
注解 | 结果 |
---|---|
没有@DS | 默认数据源(spring.datasource.dynamic.primary设置) |
@DS(“dsName”) | dsName可以为组名也可以为具体某个库的名称 |