1.先在application.yml文件的数据源配置中多加个数据源配置:dialect
spring:datasource:primary:url: jdbc:mysql://localhost:3306/mydbdriver - class - name: com.mysql.cj.jdbc.Driverdialect - type: mysqlsecondary:url: jdbc:oracle://localhost:1521/orcldriver - class - name: oracle.jdbc.driver.OracleDriverdialect - 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 {@Autowiredprivate DataSource primaryDataSource;@Autowiredprivate DataSource secondaryDataSource;@Beanpublic Interceptor pageHelperPrimary() {PageInterceptor pageInterceptor = new PageInterceptor();Properties properties = new Properties();String dialect = getDialect(primaryDataSource);properties.setProperty("dialect", dialect);// 可以设置其他PageHelper相关的参数 pageInterceptor.setProperties(properties);return pageInterceptor;}@Beanpublic 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方言 } }