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主数据库结果:

相关推荐
专注API从业者1 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠1 小时前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY1 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克32 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠3 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌3 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局3 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化
阿丰资源3 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
呱牛do it3 小时前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
java
消失的旧时光-19434 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解