Ver código fonte

测试多租户

miemie 6 anos atrás
pai
commit
d64cbd12dc

+ 4 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/SqlTest.java

@@ -2,9 +2,13 @@ package com.baomidou.mybatisplus.test;
 
 import org.junit.Test;
 
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 public class SqlTest {
 
     @Test
     public void test() {
+        Stream.of(1, 2, 3, 4, 5).collect(Collectors.toList()).toArray();
     }
 }

+ 6 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/base/entity/LogicTestData.java

@@ -10,6 +10,12 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 
 /**
+ * 包含功能:
+ * 1.继承父类字段     验证无误
+ * 2.自动填充        验证无误
+ * 3.逻辑删除        验证无误
+ * 4.乐观锁          验证无误
+ *
  * @author meimie
  * @since 2018/6/7
  */

+ 10 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/base/entity/TestData.java

@@ -13,6 +13,12 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 
 /**
+ * 包含功能:
+ * 1.继承父类字段     验证无误
+ * 2.自动填充        验证无误
+ * 3.乐观锁          验证无误
+ * 4.多租户          验证无误
+ *
  * @author meimie
  * @since 2018/6/7
  */
@@ -37,4 +43,8 @@ public class TestData extends BaseEntity {
 
     @Version
     private Integer version;
+    /**
+     * 多租户
+     */
+    private Long tenantId;
 }

+ 0 - 1
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/base/mapper/LogicTestDataMapper.java

@@ -8,5 +8,4 @@ import com.baomidou.mybatisplus.test.base.entity.LogicTestData;
  * @since 2018-07-06
  */
 public interface LogicTestDataMapper extends BaseMapper<LogicTestData> {
-
 }

+ 10 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/base/mapper/TestDataMapper.java

@@ -1,11 +1,21 @@
 package com.baomidou.mybatisplus.test.base.mapper;
 
+import com.baomidou.mybatisplus.annotation.SqlParser;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.test.base.entity.TestData;
+import org.apache.ibatis.annotations.ResultType;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
 
 /**
  * @author miemie
  * @since 2018/6/7
  */
 public interface TestDataMapper extends BaseMapper<TestData> {
+
+    @SqlParser(filter = true)
+    @ResultType(TestData.class)
+    @Select("select * from tb_test_data")
+    List<TestData> getAllNoTenant();
 }

+ 11 - 4
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/mysql/MysqlTestDataMapperTest.java

@@ -10,7 +10,9 @@ import com.baomidou.mybatisplus.test.base.entity.TestData;
 import com.baomidou.mybatisplus.test.base.mapper.LogicTestDataMapper;
 import com.baomidou.mybatisplus.test.base.mapper.TestDataMapper;
 import com.baomidou.mybatisplus.test.base.service.ILogicTestDataService;
+import com.baomidou.mybatisplus.test.mysql.config.MysqlDb;
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.test.context.ContextConfiguration;
@@ -46,10 +48,10 @@ public class MysqlTestDataMapperTest {
     @Resource
     private ILogicTestDataService logicTestDataService;
 
-//    @BeforeClass
-//    public static void init() throws IOException, SQLException {
-//        MysqlDb.initMysqlData();
-//    }
+    @BeforeClass
+    public static void init() throws Exception {
+        MysqlDb.initMysqlData();
+    }
 
     @Test
     public void insertForeach() {
@@ -173,6 +175,11 @@ public class MysqlTestDataMapperTest {
             .eq("id", 1014361515554881538L));
     }
 
+    @Test
+    public void getAllNoTenant() {
+        mapper.getAllNoTenant();
+    }
+
     @Test
     public void selectById() {
         mapper.selectById(1L);

+ 42 - 4
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/mysql/config/MybatisPlusConfig.java

@@ -2,11 +2,16 @@ package com.baomidou.mybatisplus.test.mysql.config;
 
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
 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.plugins.OptimisticLockerInterceptor;
 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.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.type.JdbcType;
 import org.mybatis.spring.annotation.MapperScan;
@@ -14,6 +19,8 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 import javax.sql.DataSource;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
@@ -28,7 +35,8 @@ import javax.sql.DataSource;
 public class MybatisPlusConfig {
 
     @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();
         /* 数据源 */
         sqlSessionFactory.setDataSource(dataSource);
@@ -39,8 +47,7 @@ public class MybatisPlusConfig {
         /* 驼峰转下划线 */
         configuration.setMapUnderscoreToCamelCase(true);
         /* 分页插件 */
-        PaginationInterceptor pagination = new PaginationInterceptor();
-        configuration.addInterceptor(pagination);
+        configuration.addInterceptor(paginationInterceptor);
         /* 乐观锁插件 */
         configuration.addInterceptor(new OptimisticLockerInterceptor());
         sqlSessionFactory.setConfiguration(configuration);
@@ -52,11 +59,42 @@ public class MybatisPlusConfig {
 
     @Bean
     public GlobalConfig globalConfig() {
-        GlobalConfig conf = new GlobalConfig();
+        GlobalConfig conf = new GlobalConfig().setSqlParserCache(true);
         conf.setDbConfig(new GlobalConfig.DbConfig());
         /* 逻辑删除注入器 */
         LogicSqlInjector logicSqlInjector = new LogicSqlInjector();
         conf.setSqlInjector(logicSqlInjector);
         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;
+    }
 }

+ 5 - 4
mybatis-plus/src/test/resources/mysql/test_data.ddl.sql

@@ -11,10 +11,10 @@ CREATE TABLE IF NOT EXISTS tb_test_data_logic (
     create_datetime datetime,
     update_datetime datetime,
     deleted         tinyint(1) default 0,
-    version        integer default 0
+    version         integer    default 0
 )
     ENGINE = innodb
-    DEFAULT CHARSET = utf8;
+DEFAULT CHARSET = utf8;
 
 CREATE TABLE IF NOT EXISTS tb_test_data (
     id              BIGINT primary key,
@@ -28,7 +28,8 @@ CREATE TABLE IF NOT EXISTS tb_test_data (
     test_timestamp  timestamp,
     create_datetime datetime,
     update_datetime datetime,
-    version        integer default 0
+    version         integer default 0,
+    tenant_id       bigint
 )
     ENGINE = innodb
-    DEFAULT CHARSET = utf8;
+DEFAULT CHARSET = utf8;