1、優先使用information_schema來檢查,如果沒有查詢這個的權限則使用show tables來檢查。
mapper:
import java.util.Map;
import org.apache.ibatis.annotations.Param;
/**
* 通用的mapper
* @author yangzl
* @data 2019年4月8日
*
*/
public interface CommonMapper {
/**
* 使用information_schema檢查表是否存在
* @param tableSchema
* @param tableName
* @return
*/
Integer checkTableExistsWithSchema(@Param("tableSchema")String tableSchema, @Param("tableName")String tableName);
/**
* 使用show tables檢查表是否存在
* @param tableName
* @return
*/
Map<String, String> checkTableExistsWithShow(@Param("tableName")String tableName);
}
xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yangzhilong.mapper.CommonMapper">
<select id="checkTableExistsWithSchema"
resultType="java.lang.Integer">
SELECT COUNT(1) FROM information_schema.tables WHERE
table_schema=#{tableSchema} AND table_name = #{tableName}
</select>
<select id="checkTableExistsWithShow"
resultType="java.util.Map">
show tables like #{tableName}
</select>
</mapper>
通用service:
package com.yangzhilong.service;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import com.yangzhilong.mapper.CommonMapper;
import lombok.extern.slf4j.Slf4j;
@Service
@Slf4j
public class CommonService {
private static final String TABLE_SCHEMA = "ad_engine";
@Autowired
private CommonMapper commonMapper;
/**
* 檢查表是否存在
* @param tableName
* @return
*/
public boolean checkTableExists(String tableName) {
try {
Integer count = commonMapper.checkTableExistsWithSchema(TABLE_SCHEMA, tableName);
return count == 1;
} catch (Exception e) {
log.error("使用information_schema檢測表失敗", e);
Map<String, String> list = commonMapper.checkTableExistsWithShow(tableName);
if(!CollectionUtils.isEmpty(list)) {
return true;
}
}
return false;
}
}