MyBatis-Flex入门以及多数据源配置

MyBatis-Flex入门以及多数据源配置

1、创建一个springboot项目,并添加 Maven 依赖

需要添加的 Maven 主要依赖示例:

java 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
           <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>compile</scope>
        </dependency>
    <dependency>
        <groupId>com.mybatis-flex</groupId>
        <artifactId>mybatis-flex-spring-boot-starter</artifactId>
        <version>1.11.5</version>
    </dependency>
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
    </dependency>
    <!-- for test only -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
        <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

注意: 如果您当前使用的是 SpringBoot v3.x 版本,需要把依赖 mybatis-flex-spring-boot-starter 修改为:mybatis-flex-spring-boot3-starter, 如下代码所示:

java 复制代码
 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>compile</scope>
        </dependency>

        <!--springboot3 mybatis-flex相关依赖 -->
        <dependency>
            <groupId>com.mybatis-flex</groupId>
            <artifactId>mybatis-flex-spring-boot3-starter</artifactId>
            <version>1.11.1</version>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

2、修改application.yml配置

java 复制代码
# DataSource Config
mybatis:
  flex:
    datasource:
      #主数据源配置 (这里以mysql为例)
      ds1:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/fbpt
        username: root
        password: 123456
      #从数据源配置 (这里以mysql为例,其他db)
      ds2:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/meeting_db
        username: root
        password: 123456

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:

java 复制代码
@SpringBootApplication
@MapperScan("cn.com.markly.mybatis_flex_demo.mapper")
public class MybatisFlexDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(MybatisFlexDemoApplication.class, args);
	}

}

3、数据库分别创建测试表

数据库fbpt

java 复制代码
CREATE TABLE IF NOT EXISTS `tb_account`
(
    `id`        INTEGER PRIMARY KEY auto_increment,
    `user_name` VARCHAR(100),
    `age`       INTEGER,
    `birthday`  DATETIME
);

INSERT INTO tb_account(id, user_name, age, birthday)
VALUES (1, '张三ds1', 18, '2020-01-11'),
       (2, '李四ds1', 19, '2021-03-21');

数据库meeting_db

java 复制代码
CREATE TABLE IF NOT EXISTS `tb_account`
(
    `id`        INTEGER PRIMARY KEY auto_increment,
    `user_name` VARCHAR(100),
    `age`       INTEGER,
    `birthday`  DATETIME
);

INSERT INTO tb_account(id, user_name, age, birthday)
VALUES (1, '张三ds2', 18, '2020-01-11'),
       (2, '李四ds2', 19, '2021-03-21');

4、编写实体类和 Mapper 接口

这里使用了 Lombok 来简化代码。

java 复制代码
@Data
@Table("tb_account")
public class Account {

    @Id(keyType = KeyType.Auto)
    private Long id;
    private String userName;
    private Integer age;
    private Date birthday;

}

使用 @Table("tb_account") 设置实体类与表名的映射关系

使用 @Id(keyType = KeyType.Auto) 标识主键为自增

Mapper 接口继承 BaseMapper 接口:

java 复制代码
public interface AccountMapper extends BaseMapper<Account> {

}

生成对应的service层、controller层

5、编写测试代码进行测试

java 复制代码
@RestController
public class AccountController {

    @Autowired
    private AccountService accountService;

    //查询主数据库
    @RequestMapping("/getAccountPage")
    public Page<Account> getAccountPage(){
        return accountService.selectPage(1, 10);
    }
    //查询ds2数据库
    @RequestMapping("/getAccountPageDS2")
    public Page<Account> getAccountPageDS2(){
        return accountService.getAccountPageDS2(1, 10);
    }

}
java 复制代码
@Service
public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements AccountService {

    @Autowired
    private AccountMapper accountMapper;

    @Override //没有@UseDataSource注解默认使用ds1主数据源
    public Page<Account> selectPage(int page, int size) {
        Page<Account> accountPage = new Page<>(page,size);
        QueryWrapper queryWrapper = QueryWrapper.create();
        queryWrapper.eq("id", 1);
        Page<Account> paginate = accountMapper.paginate(accountPage, queryWrapper);
        return paginate;
    }

    @Override
    @UseDataSource("ds2")//指定ds2数据源
    public Page<Account> getAccountPageDS2(int page, int size) {
        Page<Account> accountPage = new Page<>(page,size);
        QueryWrapper queryWrapper = QueryWrapper.create();
        queryWrapper.eq("id", 2);
        Page<Account> paginate = accountMapper.paginate(accountPage, queryWrapper);
        return paginate;
    }
}

在service层、mapper层方法上使用@UseDataSource注解即可指定数据源
6、调用方法进行测试

调用getAccountPage方法查询ds1主数据库结果:

调用getAccountPageDS2方法查询ds2主数据库结果:

相关推荐
乐观勇敢坚强的老彭2 小时前
c++信奥寒假营集训01
android·java·c++
郑州光合科技余经理2 小时前
同城配送调度系统实战:JAVA微服务
java·开发语言·前端·后端·微服务·中间件·php
独自破碎E2 小时前
【模拟】顺时针旋转矩阵
java·线性代数·矩阵
TsengOnce2 小时前
Docker 安装达梦8数据库-5步成功
java·数据库
树码小子2 小时前
Spring框架:Spring程序快速上手
java·后端·spring
李松桃2 小时前
python第三次作业
java·前端·python
马士兵教育2 小时前
计算机专业学生入行IT行业,编程语言如何选择?
java·开发语言·c++·人工智能·python
本妖精不是妖精3 小时前
搭建 JNI 开发环境:使用 IntelliJ IDEA 和 CLion
java
老毛肚3 小时前
uniapp-ruoyi-spring部署宝塔
java·spring·uni-app