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

相关推荐
Dontla2 分钟前
冒烟测试介绍(Smoke Test、BVT构建验证测试、构建验收测试)与回归测试对比、与单元测试对比、与集成测试对比、Cypress
java·单元测试·集成测试
暖和_白开水23 分钟前
数据分析agent(十):loguru日志输出优化 和es 启动流程
java·elasticsearch·数据分析
减瓦23 分钟前
Gradle 版本演进全景:构建工具的进化密码
java·gradle
玛丽莲茼蒿23 分钟前
很难出错的Spring5(十)—— IOC进阶
java·开发语言·jvm
减瓦28 分钟前
Jackson 使用指南
java·spring boot·json
Devin~Y31 分钟前
互联网大厂 Java 面试实录:Spring Boot、MyBatis、Redis、Kafka、Spring Security、RAG 与 MCP 全链路问答
java·redis·kafka·mybatis·spring security·spring mvc·sprint boot
weixin_4376629833 分钟前
redisson
java
码农进化录35 分钟前
Java 程序员的 AI 进化论 | AI 加 Postman 跑接口测试,省了三天活
java·后端·openai
阿米亚波1 小时前
【C++ STL】std::array
java·开发语言·c++
奶糖 肥晨1 小时前
mac系统中Java项目环境配置与问题解决全记录| 项目构建篇:Maven编译与打包
java·macos·maven