SpringBoot整合Mybatis-Plus+Druid实现多数据源配置功能

下面我将为你详细讲解“SpringBoot整合Mybatis-Plus+Druid实现多数据源配置功能”的完整攻略,包括配置步骤、示例说明等。

配置步骤

  1. 引入依赖

pom.xml文件中添加以下依赖:

```xml


org.springframework.boot
spring-boot-starter-web


com.baomidou
mybatis-plus-boot-starter
3.4.1


com.alibaba
druid-spring-boot-starter
1.2.6

```

  1. 配置数据源

application.yml文件中配置数据源,需要在主数据源和副数据源中分别配置urlusernamepassword等连接信息,并指定其使用的连接池类型,如下所示:

```yml
spring:
datasource:
# 主数据源配置
primary:
url: jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 连接池配置
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 10
validation-query: select 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
initial-size: 5
min-idle: 5
max-active: 20
filters: stat, wall, log4j2

  # 副数据源配置
  secondary:
    url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 连接池配置
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 10
      validation-query: select 1
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      initial-size: 5
      min-idle: 5
      max-active: 20
      filters: stat, wall, log4j2

```

  1. 配置Mybatis-Plus

application.yml文件中配置Mybatis-Plus,主要是配置Mapper的包路径,如下所示:

yml
mybatis-plus:
mapper-locations: classpath:mapper/*.xml

  1. 配置Mybatis-Plus分页插件

在SpringBoot启动类中添加如下代码:

```java
@Configuration
public class MybatisPlusConfig {

  @Bean
  public PaginationInterceptor paginationInterceptor() {
      return new PaginationInterceptor();
  }

}
```

  1. 创建Mapper接口

创建Mapper接口,并使用Mybatis-Plus提供的@Mapper注解进行标记,同时需要使用@DS注解指定当前数据源,如下所示:

```java
@Mapper
@DS("primary") // 指定数据源
public interface PrimaryMapper {

  @Select("select * from user")
  List<User> selectAll();

}

@Mapper
@DS("secondary") // 指定数据源
public interface SecondaryMapper {

  @Select("select * from book")
  List<Book> selectAll();

}
```

  1. 测试

在Controller中注入两个Mapper接口,然后调用对应的方法即可,如下所示:

```java
@RestController
public class TestController {

  @Autowired
  private PrimaryMapper primaryMapper;

  @Autowired
  private SecondaryMapper secondaryMapper;

  @GetMapping("/test")
  public void test() {
      System.out.println(primaryMapper.selectAll()); // 使用主数据源
      System.out.println(secondaryMapper.selectAll()); // 使用副数据源
  }

}
```

示例说明

下面分别使用主数据源和副数据源创建一个表,并存入数据,然后从对应的数据源中查询数据。

  1. 使用主数据源

创建一个名为test1的数据库,并在其中创建一个名为user的数据表,表结构如下所示:

sql
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`age` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

然后在主数据源中插入一条数据,代码如下所示:

```java
@Mapper
@DS("primary") // 指定数据源
public interface PrimaryMapper {

  @Select("select * from user")
  List<User> selectAll();

  @Insert("insert into user(name, age) values('张三', 20)")
  int insert();

}
```

最后,在Controller中调用insert()方法插入一条数据,并用selectAll()方法查询所有数据,代码如下所示:

```java
@RestController
public class TestController {

  @Autowired
  private PrimaryMapper primaryMapper;

  @GetMapping("/test")
  public void test() {
      primaryMapper.insert(); // 插入数据到主数据源
      System.out.println(primaryMapper.selectAll()); // 查询主数据源中的所有数据
  }

}
```

在浏览器中访问http://localhost:8080/test,即可看到主数据源中的所有数据。

  1. 使用副数据源

创建一个名为test2的数据库,并在其中创建一个名为book的数据表,表结构如下所示:

sql
CREATE TABLE `book` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`price` decimal(10,2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

然后在副数据源中插入一条数据,代码如下所示:

```java
@Mapper
@DS("secondary") // 指定数据源
public interface SecondaryMapper {

  @Select("select * from book")
  List<Book> selectAll();

  @Insert("insert into book(name, price) values('Java从入门到放弃', 99.9)")
  int insert();

}
```

最后,在Controller中调用insert()方法插入一条数据,并用selectAll()方法查询所有数据,代码如下所示:

```java
@RestController
public class TestController {

  @Autowired
  private SecondaryMapper secondaryMapper;

  @GetMapping("/test")
  public void test() {
      secondaryMapper.insert(); // 插入数据到副数据源
      System.out.println(secondaryMapper.selectAll()); // 查询副数据源中的所有数据
  }

}
```

在浏览器中访问http://localhost:8080/test,即可看到副数据源中的所有数据。

至此,本篇文章已经为你详细讲解了“SpringBoot整合Mybatis-Plus+Druid实现多数据源配置功能”的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合Mybatis-Plus+Druid实现多数据源配置功能 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • CSS display:block在Firefox下显示布局错乱问题

    问题描述: 在Firefox下,使用CSS display:block属性设定元素为块状元素时,有时候会出现布局错乱问题。这个问题主要会出现在交互式元素、定位元素以及浮动元素上。 解决方案: 解决这个问题的方法是手动设置元素的宽度或者使用overflow:hidden属性。 方法一:手动设置宽度 如果一个块状元素没有设置宽度,那么Firefox会按照默认宽度…

    css 2023年6月10日
    00
  • Bootstrap栅格系统学习笔记

    Bootstrap栅格系统学习笔记 什么是Bootstrap栅格系统 Bootstrap栅格系统是一套用于响应式Web设计的前端框架。它将页面划分为12个等宽的列,然后使用CSS中的媒体查询来调整这些列的宽度,从而适应不同屏幕大小的设备,例如大桌面电脑、笔记本电脑、平板电脑和手机等。在Bootstrap中,使用<div>元素来创建行(.row)和…

    css 2023年6月11日
    00
  • 利用CSS实现酷炫的下拉框特效

    下面是详细讲解如何利用CSS实现酷炫的下拉框特效的完整攻略。 1. 确定需求 在开始实现之前,我们需要明确我们需要实现的下拉框的样式和交互效果,例如: 下拉框的触发方式,比如点击按钮或者鼠标悬浮等; 下拉框的样式,比如下拉框的宽度和高度、边框、背景色等; 下拉框选项的样式,比如字体颜色、背景色、鼠标悬浮效果等; 下拉框的动画效果,比如下拉展开和收回的动画效果…

    css 2023年6月9日
    00
  • CSS 实现蜂巢/六边形图集的示例代码

    下面是为实现蜂巢/六边形图集的示例代码的完整攻略: 前言 蜂巢/六边形图集是CSS中非常有趣的设计之一,它可以用于在网站中展示图片或图标。这种设计不仅美观,而且可以增加用户的交互性。本文将为大家介绍如何使用CSS实现蜂巢/六边形图集。 实现步骤 步骤1:创建HTML骨架 首先,我们需要创建一个HTML骨架,用于包含六边形图集。以下是一个示例HTML代码: &…

    css 2023年6月10日
    00
  • 多重CSS背景动画实现方法示例

    好的。首先需要说明的是,本攻略主要是讲解如何使用 CSS 实现多重背景动画效果。这需要一些 CSS 基础知识,包括 CSS3 动画、伪类、多重背景等。 一、多重背景 多重背景是 CSS3 中的一个新特性。通过 CSS3,可以在一个元素中设置多张背景图片,并可以为每个背景图片设置不同的属性值,比如位置、尺寸、重复方式等。 多重背景的语法如下: backgrou…

    css 2023年6月9日
    00
  • firefox不显示border通过清除float便可解决

    要让问题更加清晰,我们先来分析一下具体的情况: 场景:在 Firefox 浏览器中使用 border-radius 给一个 div 添加圆角样式,但边框(border)不显示(无边框)。 原因:该元素的子元素采用了浮动(float)布局,并且没有被清除,导致父元素没有正常地包裹子元素,因此边框无法正常显示。 那么,如何解决这个问题呢? 一个简单而有效的解决方…

    css 2023年6月10日
    00
  • CSS盒子隐藏/显示后再最上层的实现代码

    实现CSS盒子隐藏/显示后再最上层,可以使用position属性和z-index属性。 具体步骤如下: 确定要隐藏/显示的盒子,如下例中的一个div标签: <div class="box"> 这是一个要隐藏/显示的盒子。 </div> 在CSS中设置盒子的position属性为absolute或fixed,这样可以…

    css 2023年6月10日
    00
  • 详解HTML的 标签及其禁用方法

    接下来我详细讲解一下“详解HTML的 标签及其禁用方法”。 什么是标签? <input>标签是用于在网页中接收用户输入的标签,常用于表单中,可输入各种类型的数据。该标签有多种属性,可用于设置不同的输入类型、限制输入格式、设置默认值等。 标签有哪些常用属性? 以下是<input>标签的常用属性及其作用: type:设置不同的输入类型; …

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部