|
@@ -2,11 +2,16 @@ package com.baomidou.mybatisplus.test.mysql.config;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
|
import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
|
import com.baomidou.mybatisplus.core.config.GlobalConfig;
|
|
import com.baomidou.mybatisplus.core.config.GlobalConfig;
|
|
|
|
+import com.baomidou.mybatisplus.core.parser.ISqlParser;
|
|
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
|
|
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
|
|
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
|
|
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
|
|
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
|
|
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
|
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
|
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
|
|
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
|
|
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
|
|
import com.baomidou.mybatisplus.test.mysql.MysqlMetaObjectHandler;
|
|
import com.baomidou.mybatisplus.test.mysql.MysqlMetaObjectHandler;
|
|
|
|
+import net.sf.jsqlparser.expression.Expression;
|
|
|
|
+import net.sf.jsqlparser.expression.LongValue;
|
|
import org.apache.ibatis.session.SqlSessionFactory;
|
|
import org.apache.ibatis.session.SqlSessionFactory;
|
|
import org.apache.ibatis.type.JdbcType;
|
|
import org.apache.ibatis.type.JdbcType;
|
|
import org.mybatis.spring.annotation.MapperScan;
|
|
import org.mybatis.spring.annotation.MapperScan;
|
|
@@ -14,6 +19,8 @@ import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
|
|
|
import javax.sql.DataSource;
|
|
import javax.sql.DataSource;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
@@ -28,7 +35,8 @@ import javax.sql.DataSource;
|
|
public class MybatisPlusConfig {
|
|
public class MybatisPlusConfig {
|
|
|
|
|
|
@Bean("mybatisSqlSession")
|
|
@Bean("mybatisSqlSession")
|
|
- public SqlSessionFactory sqlSessionFactory(DataSource dataSource, GlobalConfig globalConfig) throws Exception {
|
|
|
|
|
|
+ public SqlSessionFactory sqlSessionFactory(DataSource dataSource, GlobalConfig globalConfig,
|
|
|
|
+ PaginationInterceptor paginationInterceptor) throws Exception {
|
|
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
|
|
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
|
|
/* 数据源 */
|
|
/* 数据源 */
|
|
sqlSessionFactory.setDataSource(dataSource);
|
|
sqlSessionFactory.setDataSource(dataSource);
|
|
@@ -39,8 +47,7 @@ public class MybatisPlusConfig {
|
|
/* 驼峰转下划线 */
|
|
/* 驼峰转下划线 */
|
|
configuration.setMapUnderscoreToCamelCase(true);
|
|
configuration.setMapUnderscoreToCamelCase(true);
|
|
/* 分页插件 */
|
|
/* 分页插件 */
|
|
- PaginationInterceptor pagination = new PaginationInterceptor();
|
|
|
|
- configuration.addInterceptor(pagination);
|
|
|
|
|
|
+ configuration.addInterceptor(paginationInterceptor);
|
|
/* 乐观锁插件 */
|
|
/* 乐观锁插件 */
|
|
configuration.addInterceptor(new OptimisticLockerInterceptor());
|
|
configuration.addInterceptor(new OptimisticLockerInterceptor());
|
|
sqlSessionFactory.setConfiguration(configuration);
|
|
sqlSessionFactory.setConfiguration(configuration);
|
|
@@ -52,11 +59,42 @@ public class MybatisPlusConfig {
|
|
|
|
|
|
@Bean
|
|
@Bean
|
|
public GlobalConfig globalConfig() {
|
|
public GlobalConfig globalConfig() {
|
|
- GlobalConfig conf = new GlobalConfig();
|
|
|
|
|
|
+ GlobalConfig conf = new GlobalConfig().setSqlParserCache(true);
|
|
conf.setDbConfig(new GlobalConfig.DbConfig());
|
|
conf.setDbConfig(new GlobalConfig.DbConfig());
|
|
/* 逻辑删除注入器 */
|
|
/* 逻辑删除注入器 */
|
|
LogicSqlInjector logicSqlInjector = new LogicSqlInjector();
|
|
LogicSqlInjector logicSqlInjector = new LogicSqlInjector();
|
|
conf.setSqlInjector(logicSqlInjector);
|
|
conf.setSqlInjector(logicSqlInjector);
|
|
return conf;
|
|
return conf;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Bean
|
|
|
|
+ public PaginationInterceptor paginationInterceptor() {
|
|
|
|
+ PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
|
|
|
|
+ /*
|
|
|
|
+ * 【测试多租户】 SQL 解析处理拦截器<br>
|
|
|
|
+ * 这里固定写成住户 1 实际情况你可以从cookie读取,因此数据看不到 【 麻花藤 】 这条记录( 注意观察 SQL )<br>
|
|
|
|
+ */
|
|
|
|
+ List<ISqlParser> sqlParserList = new ArrayList<>();
|
|
|
|
+ TenantSqlParser tenantSqlParser = new TenantSqlParser();
|
|
|
|
+ tenantSqlParser.setTenantHandler(new TenantHandler() {
|
|
|
|
+ @Override
|
|
|
|
+ public Expression getTenantId() {
|
|
|
|
+ return new LongValue(1L);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public String getTenantIdColumn() {
|
|
|
|
+ return "tenant_id";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean doTableFilter(String tableName) {
|
|
|
|
+ // 这里可以判断是否过滤表
|
|
|
|
+ return "tb_test_data_logic".equals(tableName);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ sqlParserList.add(tenantSqlParser);
|
|
|
|
+ paginationInterceptor.setSqlParserList(sqlParserList);
|
|
|
|
+ return paginationInterceptor;
|
|
|
|
+ }
|
|
}
|
|
}
|