mirror of
https://github.com/thousmile/molly-multi-tenant.git
synced 2025-12-30 04:32:26 +00:00
1.添加 查询所有不包含项目ID的表名称 的方法。
This commit is contained in:
@@ -140,7 +140,7 @@ public class ApiCmsProjectServiceImpl implements ApiCmsProjectService {
|
|||||||
.collect(
|
.collect(
|
||||||
Collectors.groupingBy(
|
Collectors.groupingBy(
|
||||||
TenantAndProject::getTenantId,
|
TenantAndProject::getTenantId,
|
||||||
Collectors.mapping(project -> project.getProjectId(), Collectors.toSet())
|
Collectors.mapping(TenantAndProject::getProjectId, Collectors.toSet())
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.xaaef.molly.corems.mapper;
|
package com.xaaef.molly.corems.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.xaaef.molly.corems.entity.CmsProject;
|
import com.xaaef.molly.corems.entity.CmsProject;
|
||||||
import com.xaaef.molly.corems.entity.TenantAndProject;
|
import com.xaaef.molly.corems.entity.TenantAndProject;
|
||||||
import org.apache.ibatis.annotations.Select;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -23,14 +23,9 @@ import java.util.Set;
|
|||||||
public interface CmsProjectMapper extends BaseMapper<CmsProject> {
|
public interface CmsProjectMapper extends BaseMapper<CmsProject> {
|
||||||
|
|
||||||
|
|
||||||
// 查询 数据库 所有的 表名称
|
// 查询 所有的 不包含 project_id 的表
|
||||||
@Select("SELECT DISTINCT TABLE_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE ())")
|
@InterceptorIgnore(tenantLine = "true")
|
||||||
Set<String> selectListTableNames();
|
Set<String> selectListTableNamesByNotIncludeColumn(String column);
|
||||||
|
|
||||||
|
|
||||||
// 查询 所有的 包含 project_id 的表
|
|
||||||
@Select("SELECT DISTINCT TABLE_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE ()) AND COLUMN_NAME = #{column}")
|
|
||||||
Set<String> selectListTableNamesByIncludeColumn(String column);
|
|
||||||
|
|
||||||
|
|
||||||
// 根据 租户的数据名称 查询 项目列表。如: molly_master 、molly_google
|
// 根据 租户的数据名称 查询 项目列表。如: molly_master 、molly_google
|
||||||
|
|||||||
@@ -40,17 +40,13 @@ public class ProjectTableRunner implements ServletContextListener {
|
|||||||
public void contextInitialized(ServletContextEvent sce) {
|
public void contextInitialized(ServletContextEvent sce) {
|
||||||
log.info("ProjectTableRunner Initialized .....");
|
log.info("ProjectTableRunner Initialized .....");
|
||||||
if (multiTenantProperties.getEnableProject()) {
|
if (multiTenantProperties.getEnableProject()) {
|
||||||
// 查询 数据库 所有的 表名称
|
// 查询 所有的 不包含 project_id 的表
|
||||||
var tableNames = projectMapper.selectListTableNames();
|
Set<String> tableNames = projectMapper.selectListTableNamesByNotIncludeColumn(PROJECT_ID);
|
||||||
// 查询 数据库 所有包含“project_id”字段的 表名称
|
|
||||||
Set<String> includeColumnProjectId = projectMapper.selectListTableNamesByIncludeColumn(PROJECT_ID);
|
|
||||||
// 排除 包含 所有包含“project_id”字段的 表名称
|
|
||||||
tableNames.removeAll(includeColumnProjectId);
|
|
||||||
MbpConst.PROJECT_IGNORE_TABLES.addAll(tableNames);
|
|
||||||
// 从 CmsProject 实体类中。获取 CmsProject 在 mysql 中的表名称。
|
// 从 CmsProject 实体类中。获取 CmsProject 在 mysql 中的表名称。
|
||||||
String projectTableName = CmsProject.class.getAnnotation(TableName.class).value();
|
String projectTableName = CmsProject.class.getAnnotation(TableName.class).value();
|
||||||
// 添加 CmsProject 的表名称
|
// 删除 CmsProject 的表名称
|
||||||
MbpConst.PROJECT_IGNORE_TABLES.add(projectTableName);
|
tableNames.add(projectTableName);
|
||||||
|
MbpConst.PROJECT_IGNORE_TABLES.addAll(tableNames);
|
||||||
log.info("ignore project_id intercept table name : \n{}", JsonUtils.toJson(MbpConst.PROJECT_IGNORE_TABLES));
|
log.info("ignore project_id intercept table name : \n{}", JsonUtils.toJson(MbpConst.PROJECT_IGNORE_TABLES));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,17 @@
|
|||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.xaaef.molly.corems.mapper.CmsProjectMapper">
|
<mapper namespace="com.xaaef.molly.corems.mapper.CmsProjectMapper">
|
||||||
|
|
||||||
|
<select id="selectListTableNamesByNotIncludeColumn" resultType="java.lang.String">
|
||||||
|
SELECT *
|
||||||
|
FROM (SELECT DISTINCT TABLE_NAME
|
||||||
|
FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = (SELECT DATABASE())) AS allTableName
|
||||||
|
WHERE allTableName.TABLE_NAME NOT IN (SELECT DISTINCT TABLE_NAME
|
||||||
|
FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = (SELECT DATABASE())
|
||||||
|
AND COLUMN_NAME = #{column})
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
<resultMap id="tenantAndProjectMap" type="com.xaaef.molly.corems.entity.TenantAndProject">
|
<resultMap id="tenantAndProjectMap" type="com.xaaef.molly.corems.entity.TenantAndProject">
|
||||||
<id property="projectId" column="project_id"/>
|
<id property="projectId" column="project_id"/>
|
||||||
@@ -13,7 +24,7 @@
|
|||||||
|
|
||||||
<select id="selectListByTenantDbName" resultMap="tenantAndProjectMap">
|
<select id="selectListByTenantDbName" resultMap="tenantAndProjectMap">
|
||||||
<foreach collection="tenantDbNameList" item="item" separator="union">
|
<foreach collection="tenantDbNameList" item="item" separator="union">
|
||||||
select project_id, #{item} AS tenant_id from ${item}.cms_project
|
SELECT project_id, #{item} AS tenant_id FROM ${item}.cms_project
|
||||||
</foreach>
|
</foreach>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user