springboot集成mybatisPlus+多数据源的实现示例

为了实现springboot集成mybatisPlus以及多数据源的实现,我们需要进行以下步骤进行操作:

1. 引入依赖

首先,在pom.xml文件中引入如下依赖:

<!-- springboot相关依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 数据源相关依赖 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.23</version>
</dependency>

<!-- mybatis-plus相关依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.1.0</version>
</dependency>

2. 数据源配置

application.yml(或application.properties)文件中,添加如下配置:

# 主数据源配置
spring.datasource.master.url=jdbc:mysql://localhost:3306/db1
spring.datasource.master.username=root
spring.datasource.master.password=root
spring.datasource.master.driver-class-name=com.mysql.jdbc.Driver

# 从数据源配置
spring.datasource.slave.url=jdbc:mysql://localhost:3306/db2
spring.datasource.slave.username=root
spring.datasource.slave.password=root
spring.datasource.slave.driver-class-name=com.mysql.jdbc.Driver

3. 配置mybatisPlus

MybatisPlusConfig类中,使用MybatisSqlSessionFactoryBean构造方法的setDataSource方法,指定数据源,完成数据源的配置。例如:

@Configuration
@MapperScan("com.example.mapper.*")
public class MybatisPlusConfig {
    /**
     * master数据源
     */
    @Bean(name = "masterDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.master")
    public DataSource masterDataSource() {
        return DruidDataSourceBuilder.create().build();
    }

    /**
     * slave数据源
     */
    @Bean(name = "slaveDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.slave")
    public DataSource slaveDataSource() {
        return DruidDataSourceBuilder.create().build();
    }

    /**
     * 多数据源配置
     */
    @Bean
    public DataSource multipleDataSource(@Qualifier("masterDataSource") DataSource masterDataSource, @Qualifier("slaveDataSource") DataSource slaveDataSource) {
        Map<String, DataSource> targetDataSources = new HashMap<>();
        targetDataSources.put("master", masterDataSource);
        targetDataSources.put("slave", slaveDataSource);
        return new DynamicDataSource(masterDataSource, targetDataSources);
    }

    /**
     * 配置MybatisPlus
     */
    @Bean
    public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean(@Qualifier("multipleDataSource") DataSource dataSource) {
        MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
        mybatisSqlSessionFactoryBean.setDataSource(dataSource);
        return mybatisSqlSessionFactoryBean;
    }
}

示例说明

示例一:使用单个数据源查询

如果只使用一个数据源进行查询,可以按照mybatisPlus的常规使用方式进行,不需要额外配置。

例如,在UserMapper中编写如下代码:

@Mapper
public interface UserMapper extends BaseMapper<User> {
    /**
     * 按条件查询用户信息
     *
     * @param age 年龄
     * @return 用户列表
     */
    @Select("select * from user where age = #{age}")
    List<User> selectByAge(int age);
}

UserController中调用该方法:

@RestController
@Slf4j
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserMapper userMapper;

    /**
     * 按年龄查询用户信息
     *
     * @param age 年龄
     * @return 用户列表
     */
    @GetMapping("/selectByAge")
    public List<User> selectByAge(int age) {
        return userMapper.selectByAge(age);
    }
}

这样可以查询到符合条件的用户列表。

示例二:使用多个数据源查询

如果需要使用多个数据源进行查询,就需要在Mapper中使用@DS注解,指定使用的数据源。

例如,在UserMapper中编写如下代码:

@Mapper
public interface UserMapper extends BaseMapper<User> {
    /**
     * 按条件查询用户信息(使用master数据源)
     *
     * @param age 年龄
     * @return 用户列表
     */
    @DS(value = "master")
    @Select("select * from user where age = #{age}")
    List<User> selectFromMasterByAge(int age);

    /**
     * 按条件查询用户信息(使用slave数据源)
     *
     * @param age 年龄
     * @return 用户列表
     */
    @DS(value = "slave")
    @Select("select * from user where age = #{age}")
    List<User> selectFromSlaveByAge(int age);
}

UserController中调用该方法:

@RestController
@Slf4j
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserMapper userMapper;

    /**
     * 按年龄查询用户信息(使用master数据源)
     *
     * @param age 年龄
     * @return 用户列表
     */
    @GetMapping("/selectFromMasterByAge")
    public List<User> selectFromMasterByAge(int age) {
        return userMapper.selectFromMasterByAge(age);
    }

    /**
     * 按年龄查询用户信息(使用slave数据源)
     *
     * @param age 年龄
     * @return 用户列表
     */
    @GetMapping("/selectFromSlaveByAge")
    public List<User> selectFromSlaveByAge(int age) {
        return userMapper.selectFromSlaveByAge(age);
    }
}

这样就可以分别使用不同的数据源查询到符合条件的用户列表了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot集成mybatisPlus+多数据源的实现示例 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Oracle在PL/SQL中使用子查询

    下面是Oracle在PL/SQL中使用子查询的完整攻略,包含基本概念、语法、示例说明等。 基本概念 子查询是一个嵌套在另一个查询语句中的查询语句。它的结果可作为在 SELECT 、INSERT、UPDATE 、DELETE 等语句中使用,与表名类似(省略FROM),一般出现在WHERE子句中。 在PL/SQL中,子查询可以用于多个地方,包括: WHERE 子…

    database 2023年5月21日
    00
  • 拥有5星评级数据库表结构 如何才能更高效的使用?

    确保数据库表结构设计合理 首先,要确保数据库表结构设计合理,能够满足实际需求。在拥有5星评级的数据库中,每个数据表都应该有适当的列来存储实际的数据,并使用适当的数据类型。此外,对于需要频繁查询的列可以创建索引,以提高查询效率。同时,也要注意避免过度标准化,避免重复存储数据,以减少不必要的查询和JOIN操作。 缓存数据 在设计5星评级的数据库表结构时,要尽可能…

    database 2023年5月19日
    00
  • 使用达思SQL数据库修复软件修复中了勒索病毒加密的数据库教程

    使用达思SQL数据库修复软件修复中了勒索病毒加密的数据库是一个比较复杂的过程,需要掌握一些基本的技能和步骤。下面我们将详细介绍如何操作: 1. 下载并安装达思SQL数据库修复软件 首先,需要在官方网站下载并安装达思SQL数据库修复软件。该软件可以修复各种类型的数据库,包括SQL Server、Oracle、Access等。建议下载并安装最新版本,以便获得更好…

    database 2023年5月21日
    00
  • MySql 基础知识-常用命令及sql语句

    一.常用mysql命令行命令   1,启动mysql服务 net start mysql.        停止mysql服务 net stop mysql   2,netstart -na|findstr 3306查看被监听的端口,findstr 用于查找后面的端口是否存在   3,在windowns中登陆mysql控制台的一般过程:            …

    MySQL 2023年4月12日
    00
  • 使用redis作为缓存,数据还需要存入数据库中吗?(转)

    转自https://blog.csdn.net/wypersist/article/details/79955704 使用redis作为缓存,数据还需要存入数据库中吗?     我的答案是: 1redis只是缓存,不是数据库如mysql,所以redis中有的数据库,mysql中一定有。 2用户请求先去请求redis,如果没有,再去数据库中去读取。 3redi…

    Redis 2023年4月11日
    00
  • SQL 返回非分组列

    SQL中的分组(Group by)用于将相同值的行组合成一个汇总行,通常会结合聚合函数(如COUNT, SUM, AVG等)来计算分组后的结果。分组操作需要指定一个或多个分组列,而所有非分组列则需要使用聚合函数进行处理。但有时候我们需要返回非分组列的原始值,该如何实现呢? 在SQL中,我们可以通过以下方法来返回非分组列的原始值: 1.使用子查询或视图 使用子…

    database 2023年3月27日
    00
  • Sql Server触发器的使用

    下面是关于“Sql Server触发器的使用”的完整攻略: 什么是Sql Server触发器 Sql Server触发器是一种特殊的存储过程,它会在指定事件发生时自动执行。这些事件通常是对一个表的数据进行插入、更新、删除操作。使用触发器,可以自动实施某些业务规则、强制执行复杂的完整性约束、记录所有数据的变化等。 创建Sql Server触发器的语法与步骤 触…

    database 2023年5月21日
    00
  • [Go] redis分布式锁的go-redis实现

    在分布式的业务中 , 如果有的共享资源需要安全的被访问和处理 , 那就需要分布式锁 分布式锁的几个原则; 1.「锁的互斥性」:在分布式集群应用中,共享资源的锁在同一时间只能被一个对象获取。 2. 「可重入」:为了避免死锁,这把锁是可以重入的,并且可以设置超时。 3. 「高效的加锁和解锁」:能够高效的加锁和解锁,获取锁和释放锁的性能也好。 4. 「阻塞、公平」…

    Redis 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部