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

相关推荐
lay_liu1 天前
springboot 文件下载
java·spring boot·后端
Flittly1 天前
【SpringAIAlibaba新手村系列】(11)Embedding 向量化与向量数据库
java·笔记·spring·ai·springboot
workflower1 天前
AI制造-推荐初始步骤
java·开发语言·人工智能·软件工程·制造·需求分析·软件需求
ACGkaka_1 天前
SimpleDateFormat 线程安全问题及修复方案
java·jvm·安全
leo_messi941 天前
多线程(五) -- 并发工具(二) -- J.U.C并发包(八) -- CompletableFuture组合式异步编程
android·java·c语言
m0_380113841 天前
SpringBoot创建动态定时任务的几种方式
java·spring boot·spring
Gofarlic_OMS1 天前
SolidEdge专业许可证管理工具选型关键评估标准
java·大数据·运维·服务器·人工智能
清华都得不到的好学生1 天前
数据结构->1.稀疏数组,2.数组队列(没有取模),3.环形队列
java·开发语言·数据结构
weyyhdke1 天前
基于SpringBoot和PostGIS的省域“地理难抵点(最纵深处)”检索及可视化实践
java·spring boot·spring