taosj 3 недель назад
Родитель
Сommit
16d1462b35

+ 33 - 2
forecast-backend-server/pom.xml

@@ -38,6 +38,7 @@
         <ijapy.version>2.9.12</ijapy.version>
         <openai.version>4.8.0</openai.version>
         <easyexcel.version>4.0.3</easyexcel.version>
+        <mybatis-plus.version>3.5.17</mybatis-plus.version>
     </properties>
 
     <dependencies>
@@ -108,6 +109,36 @@
             <groupId>com.github.pagehelper</groupId>
             <artifactId>pagehelper-spring-boot-starter</artifactId>
             <version>${pagehelper.spring.boot.starter.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.mybatis</groupId>
+                    <artifactId>mybatis</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.mybatis</groupId>
+                    <artifactId>mybatis-spring</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>${mybatis-plus.version}</version>
+            <exclusions>
+                <!-- 排除默认传递的 jsqlparser 5.0(JDK 11+ 专用) -->
+                <exclusion>
+                    <groupId>com.baomidou</groupId>
+                    <artifactId>mybatis-plus-jsqlparser</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+           <!-- JDK 8 专用:jsqlparser 4.9 适配版 -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-jsqlparser-4.9</artifactId>
+            <version>${mybatis-plus.version}</version>
         </dependency>
 
         <!-- 阿里数据库连接池 -->
@@ -226,11 +257,11 @@
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
 
-        <dependency>
+        <!-- <dependency> -->
             <groupId>org.openjdk.nashorn</groupId>
             <artifactId>nashorn-core</artifactId>
             <version>15.4</version>
-        </dependency> 
+        </dependency>
 
         <!-- 支付 -->
         <dependency>

+ 4 - 1
forecast-backend-server/src/main/java/com/ufo/ElectricityServiceApplication.java

@@ -5,13 +5,16 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
+import com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration;
+
 /**
  * 启动程序
  *
  * @author ufo
  */
 @EnableScheduling
-@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, PageHelperAutoConfiguration.class, MybatisPlusAutoConfiguration.class })
 public class ElectricityServiceApplication
 {
     public static void main(String[] args)

+ 58 - 5
forecast-backend-server/src/main/java/com/ufo/base/framework/config/MyBatisConfig.java

@@ -5,11 +5,12 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Properties;
+
 import javax.sql.DataSource;
 import org.apache.ibatis.io.VFS;
 import org.apache.ibatis.plugin.Interceptor;
 import org.apache.ibatis.session.SqlSessionFactory;
-import org.mybatis.spring.SqlSessionFactoryBean;
 import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
@@ -24,7 +25,15 @@ import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
 import org.springframework.core.type.classreading.MetadataReader;
 import org.springframework.core.type.classreading.MetadataReaderFactory;
 import org.springframework.util.ClassUtils;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.config.GlobalConfig;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.github.pagehelper.PageInterceptor;
 import com.ufo.base.common.utils.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
 
 /**
  * Mybatis支持*匹配扫描包
@@ -120,19 +129,63 @@ public class MyBatisConfig
     {
         String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
         String mapperLocations = env.getProperty("mybatis.mapperLocations");
-        String configLocation = env.getProperty("mybatis.configLocation");
+        // String configLocation = env.getProperty("mybatis.configLocation");
         typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
         VFS.addImplClass(SpringBootVFS.class);
 
-        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+        // ====== 改动1:工厂类由 SqlSessionFactoryBean 换成 MP 的 MybatisSqlSessionFactoryBean ======
+        final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
         sessionFactory.setDataSource(dataSource);
         sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
         sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
-        sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
-        sessionFactory.setPlugins(new Interceptor[]{auditFieldInterceptor()});
+        // sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
+        // 手动建工厂时 MP 不会自动装配 MybatisConfiguration,显式给一个
+        MybatisConfiguration configuration = new MybatisConfiguration();
+        configuration.setMapUnderscoreToCamelCase(true);
+        configuration.setCacheEnabled(true);
+        configuration.setUseGeneratedKeys(true);
+        configuration.setDefaultExecutorType(org.apache.ibatis.session.ExecutorType.SIMPLE);
+        configuration.setLogImpl(org.apache.ibatis.logging.slf4j.Slf4jImpl.class);
+        sessionFactory.setConfiguration(configuration);
+        // ====== 改动2:MP 全局配置 ======
+        GlobalConfig globalConfig = new GlobalConfig();
+        globalConfig.setDbConfig(new GlobalConfig.DbConfig());
+        sessionFactory.setGlobalConfig(globalConfig);
+
+        // ====== 改动3:插件顺序。数组越靠前 = 越内层 = 越先执行。
+        //   PageHelper 必须在 MP 分页拦截器之前,先消费 ThreadLocal 完成 LIMIT。 ======
+        sessionFactory.setPlugins(new Interceptor[]{
+                pageInterceptor(),          // 1. PageHelper:兼容历史 startPage
+                mybatisPlusInterceptor(),   // 2. MyBatis-Plus:兼容新代码 IPage
+                auditFieldInterceptor()     // 3. 你原有的审计字段拦截器
+        });
         return sessionFactory.getObject();
     }
 
+        /** 手动建工厂时 starter 的自动配置不会注入,PageHelper 必须在此手动注册 */
+    @Bean
+    public PageInterceptor pageInterceptor()
+    {
+        PageInterceptor pageInterceptor = new PageInterceptor();
+        Properties props = new Properties();
+        props.setProperty("helperDialect", "postgresql"); // 按实际库改:oracle/postgresql/sqlserver
+        props.setProperty("reasonable", "true");
+        props.setProperty("supportMethodsArguments", "true");
+        pageInterceptor.setProperties(props);
+        return pageInterceptor;
+    }
+
+        /** MyBatis-Plus 拦截器:分页内部拦截器(后续可再加乐观锁、防全表更新等) */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor()
+    {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        PaginationInnerInterceptor pagination = new PaginationInnerInterceptor(DbType.POSTGRE_SQL);
+        // pagination.setOverflow(true); // 请求页越界回首页,按需开启
+        interceptor.addInnerInterceptor(pagination);
+        return interceptor;
+    }
+
     @Bean
     public AuditFieldInterceptor auditFieldInterceptor()
     {

+ 10 - 0
forecast-backend-server/src/main/java/com/ufo/base/framework/config/MybatisPlusConfig.java

@@ -0,0 +1,10 @@
+package com.ufo.base.framework.config;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@MapperScan("com.ufo.**.mapper")
+public class MybatisPlusConfig {
+
+}

+ 3 - 0
forecast-backend-server/src/main/resources/application.yml

@@ -84,6 +84,9 @@ mybatis:
   mapperLocations: classpath*:mybatis/**/*Mapper.xml
   # 加载全局的配置文件
   configLocation: classpath:mybatis/mybatis-config.xml
+mybatis-plus:
+  mapper-locations: classpath:com/ufo/**/mapper/*Mapper.xml
+  typeEnumsPackage: com/ufo.**/enums
 
 # PageHelper分页插件
 pagehelper: