|
|
@@ -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()
|
|
|
{
|