关于MybatisPlus配置双数据库驱动连接数据库问题

MybatisPlus是Mybatis的扩展库,它提供了更多的便捷操作和增强功能,是目前比较流行的Java持久层框架之一。在使用MybatisPlus框架时,我们可能需要连接多个不同的数据库,这时就会遇到双数据库驱动连接数据库的问题。下面是一份详细的攻略:

1.添加双数据库的配置文件

首先,我们需要添加MybatisPlus的配置文件,具体名字根据项目需要来定,这里以“mybatisplus.properties”为例。在文件中添加如下配置:

#master数据源配置
master.url=jdbc:mysql://localhost:3306/db_master?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
master.driver=com.mysql.cj.jdbc.Driver
master.username=root
master.password=root

#slave数据源配置
slave.url=jdbc:mysql://localhost:3306/db_slave?useSSL=false&useUnicode=true&CharacterEncoding=utf8&serverTimezone=Asia/Shanghai
slave.driver=com.mysql.cj.jdbc.Driver
slave.username=root
slave.password=root

其中,master和slave表示两个不同的数据库连接,可以根据实际需要自行修改。url、driver、username、password等字段需要根据具体的数据库配置来设置。

2.配置数据源和事务管理器

接着,在Spring Boot配置文件application.yml中添加以下配置:

# 数据源配置
spring:
  datasource:
    master:
      url: ${master.url}
      driver-class-name: ${master.driver}
      username: ${master.username}
      password: ${master.password}
    slave:
      url: ${slave.url}
      driver-class-name: ${slave.driver}
      username: ${slave.username}
      password: ${slave.password}
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      pool-name: datasource
      minimum-idle: 5
      maximum-pool-size: 30
      auto-commit: true
      idle-timeout: 180000
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      connection-timeout: 30000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      filter:
        - com.alibaba.druid.filter.logging.Log4j2Filter
        - com.alibaba.druid.filter.stat.StatFilter

# MyBatisPlus配置
mybatis-plus:
  mapper-locations: classpath:/mapper/**Mapper.xml
  global-config:
    db-config:
      id-type: auto
      field-strategy: not_empty
      logic-delete-value: 1
      logic-not-delete-value: 0
    banner: false
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
  type-aliases-package: com.example.entity

# 事务管理器
transaction:
  enabled: true
  manager-type: jdbc
  jdbc:
    data-source: master

这里采用的是Hikari连接池,并且同时配置了master和slave两个数据源。注意到注入到事务管理器的是“master”数据源,这里可以根据实际需要来选择是否需要指定具体的数据源。

3.创建mybatis-plus的配置类

最后,我们需要创建一个MybatisPlus的配置类来整合以上配置,具体代码如下:

@Configuration
public class MybatisPlusConfig {

    @Autowired
    private Environment env;

    @Bean(name="dataSource")
    public DataSource dataSource() {
        HikariDataSource ds = new HikariDataSource();
        ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
        ds.setJdbcUrl(env.getProperty("spring.datasource.url"));
        ds.setUsername(env.getProperty("spring.datasource.username"));
        ds.setPassword(env.getProperty("spring.datasource.password"));
        return ds;
    }

    @Bean
    @Primary
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());

        // 分页插件
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        sqlSessionFactoryBean.setPlugins(new Interceptor[]{paginationInterceptor});

        // mybatis注解驼峰转换
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration .setMapUnderscoreToCamelCase(true);
        sqlSessionFactoryBean.setConfiguration(configuration);

        return sqlSessionFactoryBean.getObject();
    }

    @Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setDbConfig(new GlobalConfig.DbConfig().setIdType(IdType.AUTO));
        return globalConfig;
    }
}

在这个配置类中,我们注入了上一步定义的数据源和事务管理器,并且配置了MybatisPlus所需的相关内容,包括分页插件和驼峰转换。

注意到这里我们使用了@Primary注解,在多个相同类型的Bean时将其作为首选Bean,这个注解可以在遇到多个数据源时指定主数据源。

示例

下面两个示例分别描述了如何在普通查询和分页查询时使用不同的数据源。

示例1:普通查询

在 DAO 层,使用 @Mapper 注解标识这是一个 Mapper,再使用 @MapperScan 扫描包路径,将Mapper加入spring IOC容器,如下所示:

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user")
    @Results({
            @Result(property = "userId", column = "user_id"),
            @Result(property = "userName", column = "user_name")
    })
    List<User> getUsers();
}

@MapperScan(basePackages = "com.example.dao", sqlSessionTemplateRef = "sqlSessionTemplate")
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

在 Service 层,可以指定不同的数据源,这里使用 master 数据源进行查询,代码如下:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getUsers() {
        return userMapper.getUsers();
    }
}

如果要使用 slave 数据源进行查询,只需在相应的方法上添加该注解:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    @Qualifier("slaveSqlSessionTemplate")
    private SqlSessionTemplate slaveSqlSessionTemplate;

    @Override
    public List<User> getUsers() {
        return slaveSqlSessionTemplate.selectList("com.example.dao.UserMapper.getUsers");
    }
}

示例2:分页查询

首先,我们需要在pom.xml文件中添加依赖:

<!--Mybatis Plus 分页插件 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>

接着,我们需要在Service中注入分页插件PageHelper:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;
    @Autowired
    private PageHelper pageHelper;

    @Override
    public List<User> getUsers(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        return userMapper.getUsers();
    }
}

在使用时,指定master或slave数据源即可:

@Autowired
@Qualifier("slavePageHelper")
private PageHelper slavePageHelper;

@Autowired
@Qualifier("masterPageHelper")
private PageHelper masterPageHelper;

public Page<User> getUsers(int pageNum, int pageSize) {
    slavePageHelper.startPage(pageNum, pageSize);
    return userMapper.getUsers();
}

public Page<User> getUsers(int pageNum, int pageSize) {
    masterPageHelper.startPage(pageNum, pageSize);
    return userMapper.getUsers();
}

到此为止,一个完整的双数据库配置过程就完成了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于MybatisPlus配置双数据库驱动连接数据库问题 - Python技术站

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

相关文章

  • Spring Data JPA 设置字段默认值方式

    当使用Spring Data JPA进行持久化操作时,我们可能需要为实体中的字段设置默认值。下面是设置字段默认值的几种方式。 1. 在实体中使用变量初始化 在Java语言中,我们有一个非常方便的初始化变量的方式,即在变量声明的同时初始化它们。Spring Data JPA可以通过这种方式为实体字段设置默认值。示例如下: @Entity public clas…

    Java 2023年6月3日
    00
  • mybatis 模糊查询的实现方法

    MyBatis是一种流行的Java ORM框架,它可以帮助开发人员轻松地访问数据库。模糊查询是一种常见的查询方式,用于在所有符合特定标准的结果中查找符合特定模式的结果。在MyBatis中实现模糊查询非常简单,本文将详细介绍如何实现。 1. LIKE关键字 实现模糊查询的最常见方法是使用SQL的LIKE关键字。这个关键字指示数据库在检索数据时应该搜索包含指定模…

    Java 2023年5月20日
    00
  • SpringBoot实现统一封装返回前端结果集的示例代码

    下面我来详细讲解如何实现SpringBoot的统一封装返回前端结果集的示例代码的完整攻略。 1. 为什么需要统一封装返回结果集 在我们使用SpringBoot开发Web应用时,通常经常会用到Controller来处理请求。Controller的主要作用是接收请求,处理业务逻辑,然后将结果返回给前端。通常情况下,我们在Controller方法中使用如下方式处理…

    Java 2023年5月26日
    00
  • springboot+jersey+tomcat实现跨域方式上传文件到服务器的方式

    下面是 “springboot+jersey+tomcat实现跨域方式上传文件到服务器的方式” 的攻略: 简介 跨域问题是Web开发中常遇到的问题。在前后端分离的情况下,常常需要从前端页面中上传文件到服务器。本文将介绍如何在使用SpringBoot + Jersey框架的项目中实现跨域方式上传文件到服务器的方式。 第一步:在pom.xml中添加依赖 首先,在…

    Java 2023年5月19日
    00
  • 浅谈java对象转json,数字精确出现丢失问题

    浅谈Java对象转JSON, 数字精确出现丢失问题 在Java中,JSON序列化是一项常见的处理任务。通过将对象序列化成JSON,使得数据更容易传递和存储。但是在转换基本数据类型时,小数点精确度丢失的问题也经常出现。本文将深入探讨Java对象转JSON时数字精确出现丢失的问题,并提供解决方案。 问题描述 在Java中进行JSON序列化时,会将Java中的数字…

    Java 2023年5月26日
    00
  • JAVA代码块你了解吗

    当提到Java代码块时,一般指的是静态代码块和实例代码块。这两种代码块通常用于在类被实例化之前或初始化之前执行某些操作。下面我将详细讲解Java代码块的使用方法和注意事项,包括静态代码块和实例代码块的具体作用和范围、执行顺序以及示例说明。 Java代码块的作用和范围: 静态代码块:它用于在类被加载到内存中时执行初始化或一次性操作。静态代码块是用 static…

    Java 2023年5月30日
    00
  • java实现学生信息录入界面

    下面是“java实现学生信息录入界面”的完整攻略。 步骤一:创建GUI界面 Java的GUI界面可以使用Swing或JavaFX实现。这里我们以Swing为例。 示例一 以下代码展示了如何使用Swing创建一个简单的GUI界面,包含一个文本框和一个按钮: import javax.swing.*; public class StudentInfoGUI ex…

    Java 2023年5月24日
    00
  • SpringBoot集成Mybatis+xml格式的sql配置文件操作

    下面是SpringBoot集成Mybatis+xml格式的sql配置文件操作的完整攻略: 首先,在 pom.xml 文件中添加 Mybatis 和 Mybatis-SpringBoot-Starter 的依赖: <dependency> <groupId>org.mybatis</groupId> <artifact…

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