1、优先使用information_schema来检查,如果没有查询这个的权限则使用show tables来检查。

mapper:

  1. import java.util.Map;
  2.  
  3. import org.apache.ibatis.annotations.Param;
  4.  
  5. /**
  6. * 通用的mapper
  7. * @author yangzl
  8. * @data 2019年4月8日
  9. *
  10. */
  11. public interface CommonMapper {
  12. /**
  13. * 使用information_schema检查表是否存在
  14. * @param tableSchema
  15. * @param tableName
  16. * @return
  17. */
  18. Integer checkTableExistsWithSchema(@Param("tableSchema")String tableSchema, @Param("tableName")String tableName);
  19.  
  20. /**
  21. * 使用show tables检查表是否存在
  22. * @param tableName
  23. * @return
  24. */
  25. Map<String, String> checkTableExistsWithShow(@Param("tableName")String tableName);
  26. }

xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.yangzhilong.mapper.CommonMapper">
  4. <select id="checkTableExistsWithSchema"
  5. resultType="java.lang.Integer">
  6. SELECT COUNT(1) FROM information_schema.tables WHERE
  7. table_schema=#{tableSchema} AND table_name = #{tableName}
  8. </select>
  9.  
  10. <select id="checkTableExistsWithShow"
  11. resultType="java.util.Map">
  12. show tables like #{tableName}
  13. </select>
  14. </mapper>

通用service:

  1. package com.yangzhilong.service;
  2.  
  3. import java.util.Map;
  4.  
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import org.springframework.util.CollectionUtils;
  8.  
  9. import com.yangzhilong.mapper.CommonMapper;
  10.  
  11. import lombok.extern.slf4j.Slf4j;
  12.  
  13. @Service
  14. @Slf4j
  15. public class CommonService {
  16. private static final String TABLE_SCHEMA = "ad_engine";
  17. @Autowired
  18. private CommonMapper commonMapper;
  19.  
  20. /**
  21. * 检查表是否存在
  22. * @param tableName
  23. * @return
  24. */
  25. public boolean checkTableExists(String tableName) {
  26. try {
  27. Integer count = commonMapper.checkTableExistsWithSchema(TABLE_SCHEMA, tableName);
  28. return count == 1;
  29. } catch (Exception e) {
  30. log.error("使用information_schema检测表失败", e);
  31. Map<String, String> list = commonMapper.checkTableExistsWithShow(tableName);
  32. if(!CollectionUtils.isEmpty(list)) {
  33. return true;
  34. }
  35. }
  36.  
  37. return false;
  38. }
  39. }

mybatis检测mysql表是否存在的更多相关文章

  1. mybatis 处理 mysql 表中的 text类型的 字段

    在mysql 中 text类型的字段: service_detail text NULL 服务描述   . 对应java文件中 model 中的 String:  private String ser ...

  2. MyBatis 中两表关联查询MYSQL (14)

    MyBatis 中两表关联查询MYSQL 1.创建数据库表语句 2.插入测试数据 3.pom文件内容 <?xml version="1.0" encoding="U ...

  3. MyBatis实现Mysql数据库分库分表操作和总结

    前言 作为一个数据库,作为数据库中的一张表,随着用户的增多随着时间的推移,总有一天,数据量会大到一个难以处理的地步.这时仅仅一张表的数据就已经超过了千万,无论是查询还是修改,对于它的操作都会很耗时,这 ...

  4. 【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计+JSON查询

    mybatis实现 主从表 left join  1:n 一对多 分页查询   主表从表都有查询条件+count 需求: ======================================= ...

  5. 五、使用druid管理数据库,mybatis连接mysql数据库

    简介:    使用 mybatis 连接 mysql 数据库, 一套简单的增删改查流程, 前台用 bootstrap, bootstrap-table 框架, 最后用 druid 监控数据库连接情况 ...

  6. MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql

    一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...

  7. 4.mybatis属性和表的列名不相同时的处理方法

    /** * 属性和表的列名不相同时的处理方法 * 1.sql中给列重新命名: * select tid id, tname name from teacher t where tid=#{id} * ...

  8. MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql

    目录(?)[-] 一MyBatis简介与配置MyBatisSpringMySql MyBatis简介 MyBatisSpringMySql简单配置 搭建Spring环境 建立MySql数据库 搭建My ...

  9. MySQL表损坏预防与修复

    1.       表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. 3. mysqld 进程在写表时 ...

随机推荐

  1. 028 IDEA中下载与上传程序

    在学习的时候,更多的时候在使用eclipse,但是在使用过程中,IDEA有时候使用起来更加方便轻松. 关于,在使用过程中的一些常识,这里谢谢写写文档. 一:拉代码 1.说明 在第一次开始项目的时候,需 ...

  2. 实现判断条件中有in的判断

    如果是简单的写sql,在where中写死就可以了,但是如果是不确定的参数呢,这个时候就需要一点处理方式了. 1.后台的写法 String[] operateResult=new String[]{&q ...

  3. BOM 和 DOM

    目录 一.BOM 1.什么是BOM 2. 浏览器内容划分 归BOM管的: 归DOM管的: 3. BOM常见方法 二.DOM 1 什么是DOM 2. DOM常见方法 一.BOM 1.什么是BOM BOM ...

  4. springboot整合springmvc上传文件

    1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  5. 学生成绩管理系统C++

    今天晚上终于做完了学生成绩管理系统!激动!开心!!!哈哈哈~~~~ 总共298行代码,第一次写这么多. 其中遇到了好多困难,也烦恼了好久,不过最终都解决了! 做了之后果然,满满的成就感!抑制不住的兴奋 ...

  6. 谈谈《Dotnet core结合jquery的前后端加密解密密码密文传输的实现》一文中后端解密失败的原因

    详情请看<Dotnet core结合jquery的前后端加密解密密码密文传输的实现>,正常来讲,这个博客里面的代码是没有问题的,但是我有时候却会直接报错,原因是后台解密失败:Interna ...

  7. 深入理解arguments.callee

    在函数内部,有两个特殊的对象:arguments 和 this.其中, arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 a ...

  8. IDEA常用配置

    一.安装Activiti 1.File -> Settings -> Plugins -> 搜索actiBPM 2.解决中文乱码问题 修改IDEA的安装目录中的idea.exe.vm ...

  9. 英语口语练习系列-C26-广告-人际关系-辨别物体-如果

    词汇-广告 advertisement noun [ C ] UK /ədˈvɜː.tɪs.mənt/ US /æd.vɝːˈtaɪz.mənt/ informal ad, uk also infor ...

  10. react-native-background-job——让你的react-native项目实现后台运行

    安排在您的应用处于后台时运行JavaScript的后台任务. 即使应用程序已关闭,任务也会运行,默认情况下,也会在重新启动后继续存在. 这个库依赖于React Native的HeadlessJS ,目 ...