Skip to content

多租户插件

多租户对增删改查自动加入租户条件,并且开启后租户将完全由系统接管,开发者无法对租户做更新和插入操作。

注入器:TenantInject

处理器:TenantHandler

java
public interface TenantHandler {
    /**
     * 是否应用多租户
     *
     * @param methodInfo mapper方法详尽信息
     * @param tableInfo  主表详尽信息
     * @return
     */
    default boolean isTenant(MethodInfo methodInfo, TableInfo tableInfo) {
        return tableInfo.getFieldName(getTenantColumn()) != null;
    }

    /**
     * 返回应用的多租户字段
     *
     * @return
     */
    default String getTenantColumn() {
        return "tenant_id";
    }

    /**
     * 返回应用的多租户值
     *
     * @return
     */
    Object getTenantObject();
}

开启多租户插件方式一

java
/**
 * 开启插件方式一
 *
 * @return
 */
@Bean
public Inject[] injects() {
    /**
         * 开启插件
         */
        return new Inject[]{
                new TenantInject(new TenantHandler() {
                    public boolean isTenant(MethodInfo methodInfo, TableInfo tableInfo) {
                        return tableInfo.getFieldName(getTenantColumn()) != null;
                    }

                    @Override
                    public String getTenantColumn() {
                        return "tenant_id";
                    }

                    @Override
                    public Object getTenantObject() {
                        return 1;
                    }
                })};
}

开启多租户插件方式二

java
    /**
     * 开启插件方式二
     *
     * @return
     */
    @Bean
    public InjectFactory injectFactory() {
        InjectFactory injectFactory = new DefaultInjectFactory();
		/**
         * 开启多租户插件
         */
        injectFactory.injects(new TenantInject(new TenantHandler() {
            public boolean isTenant(MethodInfo methodInfo, TableInfo tableInfo) {
                return tableInfo.getFieldName(getTenantColumn()) != null;
            }

            @Override
            public String getTenantColumn() {
                return "tenant_id";
            }

            @Override
            public Object getTenantObject() {
                return 1;
            }
        }));
        return injectFactory;
    }