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

相关推荐
桦说编程1 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅3 小时前
Java面向对象入门(类与对象,新手秒懂)
java
初次攀爬者4 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺4 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart5 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
NE_STOP6 小时前
MyBatis-mybatis入门与增删改查
java
孟陬9 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端
想用offer打牌9 小时前
一站式了解四种限流算法
java·后端·go
华仔啊10 小时前
Java 开发千万别给布尔变量加 is 前缀!很容易背锅
java