Prechádzať zdrojové kódy

增加多租户缓存测试用例.

https://gitee.com/baomidou/mybatis-plus/issues/I12JYN
nieqiuqiu 5 rokov pred
rodič
commit
933bea99b3

+ 69 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/TenantConfig.java

@@ -0,0 +1,69 @@
+package com.baomidou.mybatisplus.test.h2.tenant;
+
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.parser.ISqlParser;
+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 net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.LongValue;
+import org.apache.ibatis.session.ExecutorType;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.type.EnumOrdinalTypeHandler;
+import org.apache.ibatis.type.JdbcType;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author nieqiuqiu 2019/12/8
+ */
+@Configuration
+@MapperScan("com.baomidou.mybatisplus.test.h2.tenant.mapper")
+public class TenantConfig {
+
+    //模拟用户切换
+    static Long TENANT_ID = 1L;
+
+    @Bean
+    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
+        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
+        sqlSessionFactory.setDataSource(dataSource);
+        MybatisConfiguration configuration = new MybatisConfiguration();
+        configuration.setJdbcTypeForNull(JdbcType.NULL);
+        configuration.setMapUnderscoreToCamelCase(true);
+        configuration.setDefaultExecutorType(ExecutorType.REUSE);
+        configuration.setDefaultEnumTypeHandler(EnumOrdinalTypeHandler.class);
+        configuration.setCacheEnabled(true);
+        sqlSessionFactory.setConfiguration(configuration);
+        PaginationInterceptor pagination = new PaginationInterceptor();
+        List<ISqlParser> sqlParserList = new ArrayList<>();
+        TenantSqlParser tenantSqlParser = new TenantSqlParser();
+        tenantSqlParser.setTenantHandler(new TenantHandler() {
+            @Override
+            public Expression getTenantId(boolean where) {
+                return new LongValue(TENANT_ID);
+            }
+
+            @Override
+            public String getTenantIdColumn() {
+                return "tenant_id";
+            }
+
+            @Override
+            public boolean doTableFilter(String tableName) {
+                return false;
+            }
+        });
+        sqlParserList.add(tenantSqlParser);
+        pagination.setSqlParserList(sqlParserList);
+        sqlSessionFactory.setPlugins(pagination);
+        return sqlSessionFactory.getObject();
+    }
+
+}

+ 31 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/TenantTest.java

@@ -0,0 +1,31 @@
+package com.baomidou.mybatisplus.test.h2.tenant;
+
+import com.baomidou.mybatisplus.test.h2.tenant.mapper.StudentMapper;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+/**
+ * @author nieqiuqiu 2019/12/8
+ */
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+@ExtendWith(SpringExtension.class)
+@ContextConfiguration(locations = {"classpath:h2/spring-tenant-h2.xml"})
+class TenantTest {
+
+    @Autowired
+    private StudentMapper studentMapper;
+
+    @Test
+    void test(){
+        TenantConfig.TENANT_ID = 2L;
+        studentMapper.selectById(1L);
+        TenantConfig.TENANT_ID = 1L;
+        studentMapper.selectById(1L);
+    }
+
+}

+ 13 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/mapper/StudentMapper.java

@@ -0,0 +1,13 @@
+package com.baomidou.mybatisplus.test.h2.tenant.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.test.h2.tenant.model.Student;
+import org.apache.ibatis.annotations.CacheNamespace;
+
+/**
+ * @author nieqiuqiu 2019/12/8
+ */
+@CacheNamespace
+public interface StudentMapper extends BaseMapper<Student> {
+
+}

+ 21 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/h2/tenant/model/Student.java

@@ -0,0 +1,21 @@
+package com.baomidou.mybatisplus.test.h2.tenant.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author nieqiuqiu 2019/12/8
+ */
+@Data
+@TableName(value = "student")
+public class Student implements Serializable {
+
+    private Long id;
+
+    private String tenantId;
+
+    private String name;
+
+}

+ 15 - 0
mybatis-plus/src/test/resources/h2/spring-tenant-h2.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xmlns="http://www.springframework.org/schema/beans"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+    <context:component-scan base-package="com.baomidou.mybatisplus.test.h2.tenant"/>
+
+    <bean class="com.baomidou.mybatisplus.test.h2.tenant.TenantConfig"/>
+
+    <bean class="com.baomidou.mybatisplus.test.h2.config.DBConfig">
+        <property name="locationPattern" value="classpath:/tenant/*.sql"/>
+    </bean>
+</beans>

+ 9 - 0
mybatis-plus/src/test/resources/tenant/init.ddl.sql

@@ -0,0 +1,9 @@
+CREATE TABLE IF NOT EXISTS  student (
+	id BIGINT(20) NOT NULL,
+	name VARCHAR(30) NULL DEFAULT NULL ,
+	tenant_id BIGINT(20) NOT NULL ,
+	PRIMARY KEY (id)
+);
+insert into student values (1,'a',1);
+insert into student values (2,'b',2);
+