springboot多数据源下,配置PageHelp方言

1.先在application.yml文件的数据源配置中多加个数据源配置:dialect
spring:
  datasource:
    primary:
      url: jdbc:mysql://localhost:3306/mydb
      driver - class - name: com.mysql.cj.jdbc.Driver
      dialect - type: mysql
    secondary:
      url: jdbc:oracle://localhost:1521/orcl
      driver - class - name: oracle.jdbc.driver.OracleDriver
      dialect - type: oracle

 

2. 新建一个PageHelperConfig类,在这个配置类中,定义了两个Bean(pageHelperPrimary和pageHelperSecondary)分别用于配置主数据源和次数据源对应的 PageHelper 拦截器。
通过getDialect方法来获取每个数据源的方言类型,并将其设置到 PageHelper 的Properties中,这样 PageHelper 就可以根据不同的方言类型来生成正确的分页 SQL 语句。

 

import com.github.pagehelper.PageInterceptor;
import org.apache.ibatis.plugin.Interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.Properties;

@Configuration
public class PageHelperConfig {

    @Autowired
    private DataSource primaryDataSource;
    @Autowired
    private DataSource secondaryDataSource;

    @Bean
    public Interceptor pageHelperPrimary() {
        PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties = new Properties();
        String dialect = getDialect(primaryDataSource);
        properties.setProperty("dialect", dialect);
        // 可以设置其他PageHelper相关的参数
        pageInterceptor.setProperties(properties);
        return pageInterceptor;
    }

    @Bean
    public Interceptor pageHelperSecondary() {
        PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties = new Properties();
        String dialect = getDialect(secondaryDataSource);
        properties.setProperty("dialect", dialect);
        // 可以设置其他PageHelper相关的参数
        pageInterceptor.setProperties(properties);
        return pageInterceptor;
    }

    private String getDialect(DataSource dataSource) {
        try {
            // 根据数据源的连接信息或者配置属性来确定方言类型
            String dialectType = null;
            if (dataSource instanceof org.springframework.boot.jdbc.DataSourceBuilder.Metadata dataSourceMetadata) {
                dialectType = dataSourceMetadata.getDriverClassName();
                if (dialectType.contains("mysql")) {
                    return "mysql";
                } else if (dialectType.contains("oracle")) {
                    return "oracle";
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "mysql"; // 默认返回mysql方言
    }
}

 

posted @ 2025-02-22 09:33  学习中的阿彬  阅读(205)  评论(0)    收藏  举报