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 垂直对齐 css中vertical-align属性(垂直对齐)的使用说明

    下面是关于”CSS 垂直对齐”的完整攻略: 什么是CSS垂直对齐? 在CSS中,我们不仅可以定义元素在水平方向上的对齐方式,还可以定义在垂直方向上的对齐方式。CSS中垂直对齐的属性是vertical-align。该属性可以用于行内元素、表格单元格等元素。 如何使用vertical-align属性? 在使用vertical-align属性时,需要注意以下几个点…

    css 2023年6月9日
    00
  • js 获取元素的具体样式信息getcss(实例讲解)

    JS 获取元素具体样式信息 在开发网页的过程中,我们通常需要获取元素的具体样式信息。JS 提供了一些 API 用于获取元素的样式信息。本篇攻略将详细讲解如何使用 JS 获取元素的具体样式信息的方法。 getComputedStyle() getComputedStyle() 方法是获取元素的计算后样式的属性值,包括它的样式表层叠和任何显式的设置,返回一个 C…

    css 2023年6月10日
    00
  • HTML仿命令行界面具体实现

    下面是HTML仿命令行界面具体实现的攻略: 1. HTML基础 首先需要掌握HTML基础,包括标签、属性、语义化等。对于仿命令行界面,需要有良好的结构和样式,可以通过使用div、ul、li、span等标签来实现。同时,为了达到更好的交互效果,可以使用JavaScript来操作DOM元素。 2. CSS样式制作 为了使仿命令行界面更加真实,需要对CSS样式进行…

    css 2023年6月10日
    00
  • html+css实现血轮眼轮回眼特效代码

    下面是实现血轮眼轮回眼特效代码的攻略: 1. 准备工作 在开始编写代码之前,需要准备以下内容: 血轮眼轮回眼的图像素材 HTML文档框架 CSS样式表 2. HTML文档框架 为了实现血轮眼轮回眼的特效,我们将HTML文档分成3层。其中,第一层为血轮眼的底部,第二层为轮回眼的中间部分,第三层为轮回眼的顶部。HTML文档框架的代码如下: <div cla…

    css 2023年6月10日
    00
  • IE6/IE7下绝对定位position:absolute和margin的冲突问题解决

    针对IE6/IE7下绝对定位position:absolute和margin的冲突问题,一般可以采取以下三种解决方式: 解决方式一:使用相对定位做包裹层 首先,我们可以为需要布局的元素外层再套一层div,设置这个包裹层为position:relative; <div style="position:relative;"> &l…

    css 2023年6月9日
    00
  • 原生JS实现自定义滚动条效果

    下面是详细讲解原生JS实现自定义滚动条效果的完整攻略。 1. 前置知识 在实现自定义滚动条之前,你需要掌握基础的 HTML、CSS、JavaScript 知识,特别是以下内容: HTML 中设置元素的高度和宽度 CSS 中设置 overflow 属性和滚动条样式 JavaScript 中事件的绑定和移除、元素的属性操作、定时器的使用等 2. 实现思路 实现自…

    css 2023年6月10日
    00
  • 使用CSS去掉超链接的虚线边框的方法

    下面是使用CSS去掉超链接的虚线边框的方法的完整攻略: 1. 为什么需要去掉超链接虚线边框 默认情况下,浏览器在渲染超链接时会在超链接周围绘制一个虚线边框。这个虚线边框的作用是给用户提供了一个视觉反馈,让用户知道这是一个超链接。但是,一些设计师或者开发者认为这个虚线边框太过突出,会干扰到网页的整体视觉效果,所以就需要去掉虚线边框。 2. 去掉超链接虚线边框的…

    css 2023年6月10日
    00
  • 使用css写带纹理渐变背景图的示例代码

    下面是关于“使用CSS写带纹理渐变背景图的示例代码”的完整攻略。 1. 准备工作 首先,我们需要准备一个需要添加背景图的HTML元素,比如一个<div>元素。我们为了方便,可以设置该元素的宽度和高度,以便观察渐变效果。假设我们设置<div>元素的宽度为400px,高度为200px,代码如下: <div style="w…

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