Browse Source

代码生成器增加数据库关键字处理接口.

聂秋秋 5 years ago
parent
commit
21cf220873
20 changed files with 1074 additions and 36 deletions
  1. 5 0
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/DataSourceConfig.java
  2. 60 0
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/IKeyWordsHandler.java
  3. 10 0
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java
  4. 27 1
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/po/TableField.java
  5. 2 2
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/po/TableInfo.java
  6. 45 0
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/keywords/BaseKeyWordsHandler.java
  7. 127 0
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/keywords/H2KeyWordsHandler.java
  8. 668 0
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/keywords/MySqlKeyWordsHandler.java
  9. 23 0
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/keywords/package-info.java
  10. 5 5
      mybatis-plus-generator/src/main/resources/templates/entity.java.btl
  11. 5 5
      mybatis-plus-generator/src/main/resources/templates/entity.java.ftl
  12. 5 5
      mybatis-plus-generator/src/main/resources/templates/entity.java.vm
  13. 5 5
      mybatis-plus-generator/src/main/resources/templates/entity.kt.btl
  14. 5 5
      mybatis-plus-generator/src/main/resources/templates/entity.kt.ftl
  15. 5 5
      mybatis-plus-generator/src/main/resources/templates/entity.kt.vm
  16. 1 1
      mybatis-plus-generator/src/main/resources/templates/mapper.xml.btl
  17. 1 1
      mybatis-plus-generator/src/main/resources/templates/mapper.xml.ftl
  18. 1 1
      mybatis-plus-generator/src/main/resources/templates/mapper.xml.vm
  19. 37 0
      mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/keywords/H2KeyWordsHandlerTest.java
  20. 37 0
      mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/keywords/MySqlKeyWordsHandlerTest.java

+ 5 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/DataSourceConfig.java

@@ -53,6 +53,11 @@ public class DataSourceConfig {
      * 类型转换
      * 类型转换
      */
      */
     private ITypeConvert typeConvert;
     private ITypeConvert typeConvert;
+    /**
+     * 关键字处理器
+     * @since 3.3.2
+     */
+    private IKeyWordsHandler keyWordsHandler;
     /**
     /**
      * 驱动连接的URL
      * 驱动连接的URL
      */
      */

+ 60 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/IKeyWordsHandler.java

@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.generator.config;
+
+import java.util.List;
+
+/**
+ * 关键字处理接口
+ *
+ * @author nieqiurong 2020/5/7.
+ * @since 3.3.2
+ */
+public interface IKeyWordsHandler {
+    
+    /**
+     * 获取关键字
+     *
+     * @return 关键字集合
+     */
+    List<String> getKeyWords();
+    
+    /**
+     * 格式化关键字格式
+     *
+     * @return 格式
+     */
+    String formatStyle();
+    
+    /**
+     * 是否为关键字
+     *
+     * @param columnName 字段名称
+     * @return 是否为关键字
+     */
+    boolean isKeyWords(String columnName);
+    
+    /**
+     * 格式化字段
+     *
+     * @param columnName 字段名称
+     * @return 格式化字段
+     */
+    default String formatColumn(String columnName) {
+        return String.format(formatStyle(), columnName);
+    }
+    
+}

+ 10 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java

@@ -656,6 +656,16 @@ public class ConfigBuilder {
                     }
                     }
                     // 处理其它信息
                     // 处理其它信息
                     field.setName(columnName);
                     field.setName(columnName);
+                    String newColumnName = columnName;
+                    IKeyWordsHandler keyWordsHandler = dataSourceConfig.getKeyWordsHandler();
+                    if (keyWordsHandler != null) {
+                        if (keyWordsHandler.isKeyWords(columnName)) {
+                            System.err.println(String.format("当前表[%s]存在字段[%s]为数据库关键字或保留字!", tableName, columnName));
+                            field.setKeyWords(true);
+                            newColumnName = keyWordsHandler.formatColumn(columnName);
+                        }
+                    }
+                    field.setColumnName(newColumnName);
                     field.setType(results.getString(dbQuery.fieldType()));
                     field.setType(results.getString(dbQuery.fieldType()));
                     INameConvert nameConvert = strategyConfig.getNameConvert();
                     INameConvert nameConvert = strategyConfig.getNameConvert();
                     if (null != nameConvert) {
                     if (null != nameConvert) {

+ 27 - 1
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/po/TableField.java

@@ -47,6 +47,18 @@ public class TableField {
     private IColumnType columnType;
     private IColumnType columnType;
     private String comment;
     private String comment;
     private String fill;
     private String fill;
+    /**
+     * 是否关键字
+     *
+     * @since 3.3.2
+     */
+    private boolean keyWords;
+    /**
+     * 数据库字段(关键字含转义符号)
+     *
+     * @since 3.3.2
+     */
+    private String columnName;
     /**
     /**
      * 自定义查询字段列表
      * 自定义查询字段列表
      */
      */
@@ -58,7 +70,7 @@ public class TableField {
     }
     }
 
 
     protected TableField setConvert(StrategyConfig strategyConfig) {
     protected TableField setConvert(StrategyConfig strategyConfig) {
-        if (strategyConfig.isEntityTableFieldAnnotationEnable()) {
+        if (strategyConfig.isEntityTableFieldAnnotationEnable() || isKeyWords()) {
             this.convert = true;
             this.convert = true;
             return this;
             return this;
         }
         }
@@ -110,4 +122,18 @@ public class TableField {
         }
         }
         return firstChar.toUpperCase() + setGetName.substring(1);
         return firstChar.toUpperCase() + setGetName.substring(1);
     }
     }
+    
+    /**
+     * 获取注解字段名称
+     *
+     * @return 字段
+     * @since 3.3.2
+     */
+    public String getAnnotationColumnName() {
+        if (columnName.startsWith("\"")) {
+            return String.format("\\%s\\", columnName);
+        }
+        return columnName;
+    }
+    
 }
 }

+ 2 - 2
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/po/TableInfo.java

@@ -144,9 +144,9 @@ public class TableInfo {
             IntStream.range(0, fields.size()).forEach(i -> {
             IntStream.range(0, fields.size()).forEach(i -> {
                 TableField fd = fields.get(i);
                 TableField fd = fields.get(i);
                 if (i == fields.size() - 1) {
                 if (i == fields.size() - 1) {
-                    names.append(fd.getName());
+                    names.append(fd.getColumnName());
                 } else {
                 } else {
-                    names.append(fd.getName()).append(", ");
+                    names.append(fd.getColumnName()).append(", ");
                 }
                 }
             });
             });
             fieldNames = names.toString();
             fieldNames = names.toString();

+ 45 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/keywords/BaseKeyWordsHandler.java

@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.generator.keywords;
+
+import com.baomidou.mybatisplus.generator.config.IKeyWordsHandler;
+
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * 基类关键字处理
+ *
+ * @author nieqiurong 2020/5/8.
+ * @since 3.3.2
+ */
+public abstract class BaseKeyWordsHandler implements IKeyWordsHandler {
+    
+    public List<String> keyWords;
+    
+    public BaseKeyWordsHandler(List<String> keyWords) {
+        this.keyWords = keyWords;
+    }
+    
+    @Override
+    public List<String> getKeyWords() {
+        return keyWords;
+    }
+    
+    public boolean isKeyWords(String columnName) {
+        return getKeyWords().contains(columnName.toUpperCase(Locale.ENGLISH));
+    }
+}

+ 127 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/keywords/H2KeyWordsHandler.java

@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.generator.keywords;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * h2数据库关键字处理
+ * http://www.h2database.com/html/advanced.html#keywords
+ *
+ * @author nieqiurong 2020/5/7.
+ * @since 3.3.2
+ */
+public class H2KeyWordsHandler extends BaseKeyWordsHandler {
+    
+    private static List<String> KEY_WORDS = new ArrayList<>(Arrays.asList(
+        "ALL",
+        "AND",
+        "ARRAY",
+        "AS",
+        "BETWEEN",
+        "BOTH",
+        "CASE",
+        "CHECK",
+        "CONSTRAINT",
+        "CROSS",
+        "CURRENT_CATALOG",
+        "CURRENT_DATE",
+        "CURRENT_SCHEMA",
+        "CURRENT_TIME",
+        "CURRENT_TIMESTAMP",
+        "CURRENT_USER",
+        "DISTINCT",
+        "EXCEPT",
+        "EXISTS",
+        "FALSE",
+        "FETCH",
+        "FILTER",
+        "FOR",
+        "FOREIGN",
+        "FROM",
+        "FULL",
+        "GROUP",
+        "GROUPS",
+        "HAVING",
+        "IF",
+        "ILIKE",
+        "IN",
+        "INNER",
+        "INTERSECT",
+        "INTERSECTS",
+        "INTERVAL",
+        "IS",
+        "JOIN",
+        "LEADING",
+        "LEFT",
+        "LIKE",
+        "LIMIT",
+        "LOCALTIME",
+        "LOCALTIMESTAMP",
+        "MINUS",
+        "NATURAL",
+        "NOT",
+        "NULL",
+        "OFFSET",
+        "ON",
+        "OR",
+        "ORDER",
+        "OVER",
+        "PARTITION",
+        "PRIMARY",
+        "QUALIFY",
+        "RANGE",
+        "REGEXP",
+        "RIGHT",
+        "ROW",
+        "_ROWID_",
+        "ROWNUM",
+        "ROWS",
+        "SELECT",
+        "SYSDATE",
+        "SYSTIME",
+        "SYSTIMESTAMP",
+        "TABLE",
+        "TODAY",
+        "TOP",
+        "TRAILING",
+        "TRUE",
+        "UNION",
+        "UNIQUE",
+        "UNKNOWN",
+        "USING",
+        "VALUES",
+        "WHERE",
+        "WINDOW",
+        "WITH"
+    ));
+    
+    public H2KeyWordsHandler() {
+        super(KEY_WORDS);
+    }
+    
+    public H2KeyWordsHandler(List<String> keyWords) {
+        super(keyWords);
+    }
+    
+    @Override
+    public String formatStyle() {
+        return "\"%s\"";
+    }
+    
+}

+ 668 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/keywords/MySqlKeyWordsHandler.java

@@ -0,0 +1,668 @@
+/*
+ * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.generator.keywords;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * mysql关键字处理
+ * 这里选取了mysql5.7文档中的关键字和保留字(含移除)https://dev.mysql.com/doc/refman/5.7/en/keywords.html
+ *
+ * @author nieqiurong 2020/5/7.
+ * @since 3.3.2
+ */
+public class MySqlKeyWordsHandler extends BaseKeyWordsHandler {
+    
+    private static List<String> KEY_WORDS = new ArrayList<>(Arrays.asList(
+        "ACCESSIBLE",
+        "ACCOUNT",
+        "ACTION",
+        "ADD",
+        "AFTER",
+        "AGAINST",
+        "AGGREGATE",
+        "ALGORITHM",
+        "ALL",
+        "ALTER",
+        "ALWAYS",
+        "ANALYSE",
+        "ANALYZE",
+        "AND",
+        "ANY",
+        "AS",
+        "ASC",
+        "ASCII",
+        "ASENSITIVE",
+        "AT",
+        "AUTOEXTEND_SIZE",
+        "AUTO_INCREMENT",
+        "AVG",
+        "AVG_ROW_LENGTH",
+        "BACKUP",
+        "BEFORE",
+        "BEGIN",
+        "BETWEEN",
+        "BIGINT",
+        "BINARY",
+        "BINLOG",
+        "BIT",
+        "BLOB",
+        "BLOCK",
+        "BOOL",
+        "BOOLEAN",
+        "BOTH",
+        "BTREE",
+        "BY",
+        "BYTE",
+        "CACHE",
+        "CALL",
+        "CASCADE",
+        "CASCADED",
+        "CASE",
+        "CATALOG_NAME",
+        "CHAIN",
+        "CHANGE",
+        "CHANGED",
+        "CHANNEL",
+        "CHAR",
+        "CHARACTER",
+        "CHARSET",
+        "CHECK",
+        "CHECKSUM",
+        "CIPHER",
+        "CLASS_ORIGIN",
+        "CLIENT",
+        "CLOSE",
+        "COALESCE",
+        "CODE",
+        "COLLATE",
+        "COLLATION",
+        "COLUMN",
+        "COLUMNS",
+        "COLUMN_FORMAT",
+        "COLUMN_NAME",
+        "COMMENT",
+        "COMMIT",
+        "COMMITTED",
+        "COMPACT",
+        "COMPLETION",
+        "COMPRESSED",
+        "COMPRESSION",
+        "CONCURRENT",
+        "CONDITION",
+        "CONNECTION",
+        "CONSISTENT",
+        "CONSTRAINT",
+        "CONSTRAINT_CATALOG",
+        "CONSTRAINT_NAME",
+        "CONSTRAINT_SCHEMA",
+        "CONTAINS",
+        "CONTEXT",
+        "CONTINUE",
+        "CONVERT",
+        "CPU",
+        "CREATE",
+        "CROSS",
+        "CUBE",
+        "CURRENT",
+        "CURRENT_DATE",
+        "CURRENT_TIME",
+        "CURRENT_TIMESTAMP",
+        "CURRENT_USER",
+        "CURSOR",
+        "CURSOR_NAME",
+        "DATA",
+        "DATABASE",
+        "DATABASES",
+        "DATAFILE",
+        "DATE",
+        "DATETIME",
+        "DAY",
+        "DAY_HOUR",
+        "DAY_MICROSECOND",
+        "DAY_MINUTE",
+        "DAY_SECOND",
+        "DEALLOCATE",
+        "DEC",
+        "DECIMAL",
+        "DECLARE",
+        "DEFAULT",
+        "DEFAULT_AUTH",
+        "DEFINER",
+        "DELAYED",
+        "DELAY_KEY_WRITE",
+        "DELETE",
+        "DESC",
+        "DESCRIBE",
+        "DES_KEY_FILE",
+        "DETERMINISTIC",
+        "DIAGNOSTICS",
+        "DIRECTORY",
+        "DISABLE",
+        "DISCARD",
+        "DISK",
+        "DISTINCT",
+        "DISTINCTROW",
+        "DIV",
+        "DO",
+        "DOUBLE",
+        "DROP",
+        "DUAL",
+        "DUMPFILE",
+        "DUPLICATE",
+        "DYNAMIC",
+        "EACH",
+        "ELSE",
+        "ELSEIF",
+        "ENABLE",
+        "ENCLOSED",
+        "ENCRYPTION",
+        "END",
+        "ENDS",
+        "ENGINE",
+        "ENGINES",
+        "ENUM",
+        "ERROR",
+        "ERRORS",
+        "ESCAPE",
+        "ESCAPED",
+        "EVENT",
+        "EVENTS",
+        "EVERY",
+        "EXCHANGE",
+        "EXECUTE",
+        "EXISTS",
+        "EXIT",
+        "EXPANSION",
+        "EXPIRE",
+        "EXPLAIN",
+        "EXPORT",
+        "EXTENDED",
+        "EXTENT_SIZE",
+        "FALSE",
+        "FAST",
+        "FAULTS",
+        "FETCH",
+        "FIELDS",
+        "FILE",
+        "FILE_BLOCK_SIZE",
+        "FILTER",
+        "FIRST",
+        "FIXED",
+        "FLOAT",
+        "FLOAT4",
+        "FLOAT8",
+        "FLUSH",
+        "FOLLOWS",
+        "FOR",
+        "FORCE",
+        "FOREIGN",
+        "FORMAT",
+        "FOUND",
+        "FROM",
+        "FULL",
+        "FULLTEXT",
+        "FUNCTION",
+        "GENERAL",
+        "GENERATED",
+        "GEOMETRY",
+        "GEOMETRYCOLLECTION",
+        "GET",
+        "GET_FORMAT",
+        "GLOBAL",
+        "GRANT",
+        "GRANTS",
+        "GROUP",
+        "GROUP_REPLICATION",
+        "HANDLER",
+        "HASH",
+        "HAVING",
+        "HELP",
+        "HIGH_PRIORITY",
+        "HOST",
+        "HOSTS",
+        "HOUR",
+        "HOUR_MICROSECOND",
+        "HOUR_MINUTE",
+        "HOUR_SECOND",
+        "IDENTIFIED",
+        "IF",
+        "IGNORE",
+        "IGNORE_SERVER_IDS",
+        "IMPORT",
+        "IN",
+        "INDEX",
+        "INDEXES",
+        "INFILE",
+        "INITIAL_SIZE",
+        "INNER",
+        "INOUT",
+        "INSENSITIVE",
+        "INSERT",
+        "INSERT_METHOD",
+        "INSTALL",
+        "INSTANCE",
+        "INT",
+        "INT1",
+        "INT2",
+        "INT3",
+        "INT4",
+        "INT8",
+        "INTEGER",
+        "INTERVAL",
+        "INTO",
+        "INVOKER",
+        "IO",
+        "IO_AFTER_GTIDS",
+        "IO_BEFORE_GTIDS",
+        "IO_THREAD",
+        "IPC",
+        "IS",
+        "ISOLATION",
+        "ISSUER",
+        "ITERATE",
+        "JOIN",
+        "JSON",
+        "KEY",
+        "KEYS",
+        "KEY_BLOCK_SIZE",
+        "KILL",
+        "LANGUAGE",
+        "LAST",
+        "LEADING",
+        "LEAVE",
+        "LEAVES",
+        "LEFT",
+        "LESS",
+        "LEVEL",
+        "LIKE",
+        "LIMIT",
+        "LINEAR",
+        "LINES",
+        "LINESTRING",
+        "LIST",
+        "LOAD",
+        "LOCAL",
+        "LOCALTIME",
+        "LOCALTIMESTAMP",
+        "LOCK",
+        "LOCKS",
+        "LOGFILE",
+        "LOGS",
+        "LONG",
+        "LONGBLOB",
+        "LONGTEXT",
+        "LOOP",
+        "LOW_PRIORITY",
+        "MASTER",
+        "MASTER_AUTO_POSITION",
+        "MASTER_BIND",
+        "MASTER_CONNECT_RETRY",
+        "MASTER_DELAY",
+        "MASTER_HEARTBEAT_PERIOD",
+        "MASTER_HOST",
+        "MASTER_LOG_FILE",
+        "MASTER_LOG_POS",
+        "MASTER_PASSWORD",
+        "MASTER_PORT",
+        "MASTER_RETRY_COUNT",
+        "MASTER_SERVER_ID",
+        "MASTER_SSL",
+        "MASTER_SSL_CA",
+        "MASTER_SSL_CAPATH",
+        "MASTER_SSL_CERT",
+        "MASTER_SSL_CIPHER",
+        "MASTER_SSL_CRL",
+        "MASTER_SSL_CRLPATH",
+        "MASTER_SSL_KEY",
+        "MASTER_SSL_VERIFY_SERVER_CERT",
+        "MASTER_TLS_VERSION",
+        "MASTER_USER",
+        "MATCH",
+        "MAXVALUE",
+        "MAX_CONNECTIONS_PER_HOUR",
+        "MAX_QUERIES_PER_HOUR",
+        "MAX_ROWS",
+        "MAX_SIZE",
+        "MAX_STATEMENT_TIME",
+        "MAX_UPDATES_PER_HOUR",
+        "MAX_USER_CONNECTIONS",
+        "MEDIUM",
+        "MEDIUMBLOB",
+        "MEDIUMINT",
+        "MEDIUMTEXT",
+        "MEMORY",
+        "MERGE",
+        "MESSAGE_TEXT",
+        "MICROSECOND",
+        "MIDDLEINT",
+        "MIGRATE",
+        "MINUTE",
+        "MINUTE_MICROSECOND",
+        "MINUTE_SECOND",
+        "MIN_ROWS",
+        "MOD",
+        "MODE",
+        "MODIFIES",
+        "MODIFY",
+        "MONTH",
+        "MULTILINESTRING",
+        "MULTIPOINT",
+        "MULTIPOLYGON",
+        "MUTEX",
+        "MYSQL_ERRNO",
+        "NAME",
+        "NAMES",
+        "NATIONAL",
+        "NATURAL",
+        "NCHAR",
+        "NDB",
+        "NDBCLUSTER",
+        "NEVER",
+        "NEW",
+        "NEXT",
+        "NO",
+        "NODEGROUP",
+        "NONBLOCKING",
+        "NONE",
+        "NOT",
+        "NO_WAIT",
+        "NO_WRITE_TO_BINLOG",
+        "NULL",
+        "NUMBER",
+        "NUMERIC",
+        "NVARCHAR",
+        "OFFSET",
+        "OLD_PASSWORD",
+        "ON",
+        "ONE",
+        "ONLY",
+        "OPEN",
+        "OPTIMIZE",
+        "OPTIMIZER_COSTS",
+        "OPTION",
+        "OPTIONALLY",
+        "OPTIONS",
+        "OR",
+        "ORDER",
+        "OUT",
+        "OUTER",
+        "OUTFILE",
+        "OWNER",
+        "PACK_KEYS",
+        "PAGE",
+        "PARSER",
+        "PARSE_GCOL_EXPR",
+        "PARTIAL",
+        "PARTITION",
+        "PARTITIONING",
+        "PARTITIONS",
+        "PASSWORD",
+        "PHASE",
+        "PLUGIN",
+        "PLUGINS",
+        "PLUGIN_DIR",
+        "POINT",
+        "POLYGON",
+        "PORT",
+        "PRECEDES",
+        "PRECISION",
+        "PREPARE",
+        "PRESERVE",
+        "PREV",
+        "PRIMARY",
+        "PRIVILEGES",
+        "PROCEDURE",
+        "PROCESSLIST",
+        "PROFILE",
+        "PROFILES",
+        "PROXY",
+        "PURGE",
+        "QUARTER",
+        "QUERY",
+        "QUICK",
+        "RANGE",
+        "READ",
+        "READS",
+        "READ_ONLY",
+        "READ_WRITE",
+        "REAL",
+        "REBUILD",
+        "RECOVER",
+        "REDOFILE",
+        "REDO_BUFFER_SIZE",
+        "REDUNDANT",
+        "REFERENCES",
+        "REGEXP",
+        "RELAY",
+        "RELAYLOG",
+        "RELAY_LOG_FILE",
+        "RELAY_LOG_POS",
+        "RELAY_THREAD",
+        "RELEASE",
+        "RELOAD",
+        "REMOVE",
+        "RENAME",
+        "REORGANIZE",
+        "REPAIR",
+        "REPEAT",
+        "REPEATABLE",
+        "REPLACE",
+        "REPLICATE_DO_DB",
+        "REPLICATE_DO_TABLE",
+        "REPLICATE_IGNORE_DB",
+        "REPLICATE_IGNORE_TABLE",
+        "REPLICATE_REWRITE_DB",
+        "REPLICATE_WILD_DO_TABLE",
+        "REPLICATE_WILD_IGNORE_TABLE",
+        "REPLICATION",
+        "REQUIRE",
+        "RESET",
+        "RESIGNAL",
+        "RESTORE",
+        "RESTRICT",
+        "RESUME",
+        "RETURN",
+        "RETURNED_SQLSTATE",
+        "RETURNS",
+        "REVERSE",
+        "REVOKE",
+        "RIGHT",
+        "RLIKE",
+        "ROLLBACK",
+        "ROLLUP",
+        "ROTATE",
+        "ROUTINE",
+        "ROW",
+        "ROWS",
+        "ROW_COUNT",
+        "ROW_FORMAT",
+        "RTREE",
+        "SAVEPOINT",
+        "SCHEDULE",
+        "SCHEMA",
+        "SCHEMAS",
+        "SCHEMA_NAME",
+        "SECOND",
+        "SECOND_MICROSECOND",
+        "SECURITY",
+        "SELECT",
+        "SENSITIVE",
+        "SEPARATOR",
+        "SERIAL",
+        "SERIALIZABLE",
+        "SERVER",
+        "SESSION",
+        "SET",
+        "SHARE",
+        "SHOW",
+        "SHUTDOWN",
+        "SIGNAL",
+        "SIGNED",
+        "SIMPLE",
+        "SLAVE",
+        "SLOW",
+        "SMALLINT",
+        "SNAPSHOT",
+        "SOCKET",
+        "SOME",
+        "SONAME",
+        "SOUNDS",
+        "SOURCE",
+        "SPATIAL",
+        "SPECIFIC",
+        "SQL",
+        "SQLEXCEPTION",
+        "SQLSTATE",
+        "SQLWARNING",
+        "SQL_AFTER_GTIDS",
+        "SQL_AFTER_MTS_GAPS",
+        "SQL_BEFORE_GTIDS",
+        "SQL_BIG_RESULT",
+        "SQL_BUFFER_RESULT",
+        "SQL_CACHE",
+        "SQL_CALC_FOUND_ROWS",
+        "SQL_NO_CACHE",
+        "SQL_SMALL_RESULT",
+        "SQL_THREAD",
+        "SQL_TSI_DAY",
+        "SQL_TSI_HOUR",
+        "SQL_TSI_MINUTE",
+        "SQL_TSI_MONTH",
+        "SQL_TSI_QUARTER",
+        "SQL_TSI_SECOND",
+        "SQL_TSI_WEEK",
+        "SQL_TSI_YEAR",
+        "SSL",
+        "STACKED",
+        "START",
+        "STARTING",
+        "STARTS",
+        "STATS_AUTO_RECALC",
+        "STATS_PERSISTENT",
+        "STATS_SAMPLE_PAGES",
+        "STATUS",
+        "STOP",
+        "STORAGE",
+        "STORED",
+        "STRAIGHT_JOIN",
+        "STRING",
+        "SUBCLASS_ORIGIN",
+        "SUBJECT",
+        "SUBPARTITION",
+        "SUBPARTITIONS",
+        "SUPER",
+        "SUSPEND",
+        "SWAPS",
+        "SWITCHES",
+        "TABLE",
+        "TABLES",
+        "TABLESPACE",
+        "TABLE_CHECKSUM",
+        "TABLE_NAME",
+        "TEMPORARY",
+        "TEMPTABLE",
+        "TERMINATED",
+        "TEXT",
+        "THAN",
+        "THEN",
+        "TIME",
+        "TIMESTAMP",
+        "TIMESTAMPADD",
+        "TIMESTAMPDIFF",
+        "TINYBLOB",
+        "TINYINT",
+        "TINYTEXT",
+        "TO",
+        "TRAILING",
+        "TRANSACTION",
+        "TRIGGER",
+        "TRIGGERS",
+        "TRUE",
+        "TRUNCATE",
+        "TYPE",
+        "TYPES",
+        "UNCOMMITTED",
+        "UNDEFINED",
+        "UNDO",
+        "UNDOFILE",
+        "UNDO_BUFFER_SIZE",
+        "UNICODE",
+        "UNINSTALL",
+        "UNION",
+        "UNIQUE",
+        "UNKNOWN",
+        "UNLOCK",
+        "UNSIGNED",
+        "UNTIL",
+        "UPDATE",
+        "UPGRADE",
+        "USAGE",
+        "USE",
+        "USER",
+        "USER_RESOURCES",
+        "USE_FRM",
+        "USING",
+        "UTC_DATE",
+        "UTC_TIME",
+        "UTC_TIMESTAMP",
+        "VALIDATION",
+        "VALUE",
+        "VALUES",
+        "VARBINARY",
+        "VARCHAR",
+        "VARCHARACTER",
+        "VARIABLES",
+        "VARYING",
+        "VIEW",
+        "VIRTUAL",
+        "WAIT",
+        "WARNINGS",
+        "WEEK",
+        "WEIGHT_STRING",
+        "WHEN",
+        "WHERE",
+        "WHILE",
+        "WITH",
+        "WITHOUT",
+        "WORK",
+        "WRAPPER",
+        "WRITE",
+        "X509",
+        "XA",
+        "XID",
+        "XML",
+        "XOR",
+        "YEAR",
+        "YEAR_MONTH",
+        "ZEROFILL"));
+    
+    public MySqlKeyWordsHandler() {
+        super(KEY_WORDS);
+    }
+    
+    public MySqlKeyWordsHandler(List<String> keyWords) {
+        super(keyWords);
+    }
+    
+    @Override
+    public String formatStyle() {
+        return "`%s`";
+    }
+    
+}

+ 23 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/keywords/package-info.java

@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+/**
+ * 数据库关键字处理
+ * 由于只是生成代码上简单使用,目前简单的实现一下。<br/>
+ * 随着数据库版本的不同,关键字会有新增或移除,建议去查询对应数据库版本文档来制订关键字集合。
+ *
+ * @author nieqiurong 2020/5/8.
+ */
+package com.baomidou.mybatisplus.generator.keywords;

+ 5 - 5
mybatis-plus-generator/src/main/resources/templates/entity.java.btl

@@ -71,23 +71,23 @@ public class ${entity} implements Serializable {
     /*主键*/
     /*主键*/
     %>
     %>
         <% if(field.keyIdentityFlag){ %>
         <% if(field.keyIdentityFlag){ %>
-    @TableId(value = "${field.name}", type = IdType.AUTO)
+    @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
         <% }else if(isNotEmpty(idType)){ %>
         <% }else if(isNotEmpty(idType)){ %>
-    @TableId(value = "${field.name}", type = IdType.${idType})
+    @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
         <% }else if(field.convert){ %>
         <% }else if(field.convert){ %>
-    @TableId("${field.name}")
+    @TableId("${field.annotationColumnName}")
          <% } %>
          <% } %>
     <%
     <%
     /*普通字段*/
     /*普通字段*/
     %>
     %>
     <% }else if(isNotEmpty(field.fill)){ %>
     <% }else if(isNotEmpty(field.fill)){ %>
         <% if(field.convert){ %>
         <% if(field.convert){ %>
-    @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
+    @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
         <% }else{ %>
         <% }else{ %>
     @TableField(fill = FieldFill.${field.fill})
     @TableField(fill = FieldFill.${field.fill})
         <% } %>
         <% } %>
     <% }else if(field.convert){ %>
     <% }else if(field.convert){ %>
-    @TableField("${field.name}")
+    @TableField("${field.annotationColumnName}")
     <% } %>
     <% } %>
     <%
     <%
     /*乐观锁注解*/
     /*乐观锁注解*/

+ 5 - 5
mybatis-plus-generator/src/main/resources/templates/entity.java.ftl

@@ -69,22 +69,22 @@ public class ${entity} implements Serializable {
     <#if field.keyFlag>
     <#if field.keyFlag>
         <#-- 主键 -->
         <#-- 主键 -->
         <#if field.keyIdentityFlag>
         <#if field.keyIdentityFlag>
-    @TableId(value = "${field.name}", type = IdType.AUTO)
+    @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
         <#elseif idType??>
         <#elseif idType??>
-    @TableId(value = "${field.name}", type = IdType.${idType})
+    @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
         <#elseif field.convert>
         <#elseif field.convert>
-    @TableId("${field.name}")
+    @TableId("${field.annotationColumnName}")
         </#if>
         </#if>
         <#-- 普通字段 -->
         <#-- 普通字段 -->
     <#elseif field.fill??>
     <#elseif field.fill??>
     <#-- -----   存在字段填充设置   ----->
     <#-- -----   存在字段填充设置   ----->
         <#if field.convert>
         <#if field.convert>
-    @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
+    @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
         <#else>
         <#else>
     @TableField(fill = FieldFill.${field.fill})
     @TableField(fill = FieldFill.${field.fill})
         </#if>
         </#if>
     <#elseif field.convert>
     <#elseif field.convert>
-    @TableField("${field.name}")
+    @TableField("${field.annotationColumnName}")
     </#if>
     </#if>
     <#-- 乐观锁注解 -->
     <#-- 乐观锁注解 -->
     <#if (versionFieldName!"") == field.name>
     <#if (versionFieldName!"") == field.name>

+ 5 - 5
mybatis-plus-generator/src/main/resources/templates/entity.java.vm

@@ -69,22 +69,22 @@ public class ${entity} implements Serializable {
 #if(${field.keyFlag})
 #if(${field.keyFlag})
 ## 主键
 ## 主键
   #if(${field.keyIdentityFlag})
   #if(${field.keyIdentityFlag})
-    @TableId(value = "${field.name}", type = IdType.AUTO)
+    @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
   #elseif(!$null.isNull(${idType}) && "$!idType" != "")
   #elseif(!$null.isNull(${idType}) && "$!idType" != "")
-    @TableId(value = "${field.name}", type = IdType.${idType})
+    @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
   #elseif(${field.convert})
   #elseif(${field.convert})
-    @TableId("${field.name}")
+    @TableId("${field.annotationColumnName}")
   #end
   #end
 ## 普通字段
 ## 普通字段
 #elseif(${field.fill})
 #elseif(${field.fill})
 ## -----   存在字段填充设置   -----
 ## -----   存在字段填充设置   -----
   #if(${field.convert})
   #if(${field.convert})
-    @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
+    @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
   #else
   #else
     @TableField(fill = FieldFill.${field.fill})
     @TableField(fill = FieldFill.${field.fill})
   #end
   #end
 #elseif(${field.convert})
 #elseif(${field.convert})
-    @TableField("${field.name}")
+    @TableField("${field.annotationColumnName}")
 #end
 #end
 ## 乐观锁注解
 ## 乐观锁注解
 #if(${versionFieldName}==${field.name})
 #if(${versionFieldName}==${field.name})

+ 5 - 5
mybatis-plus-generator/src/main/resources/templates/entity.kt.btl

@@ -50,23 +50,23 @@ class ${entity} : Serializable {
     /*主键*/
     /*主键*/
     %>
     %>
         <% if(field.keyIdentityFlag){ %>
         <% if(field.keyIdentityFlag){ %>
-    @TableId(value = "${field.name}", type = IdType.AUTO)
+    @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
         <% }else if(isNotEmpty(idType)){ %>
         <% }else if(isNotEmpty(idType)){ %>
-    @TableId(value = "${field.name}", type = IdType.${idType})
+    @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
         <% }else if(field.convert){ %>
         <% }else if(field.convert){ %>
-    @TableId("${field.name}")
+    @TableId("${field.columnName}")
          <% } %>
          <% } %>
     <%
     <%
     /*普通字段*/
     /*普通字段*/
     %>
     %>
     <% }else if(isNotEmpty(field.fill)){ %>
     <% }else if(isNotEmpty(field.fill)){ %>
         <% if(field.convert){ %>
         <% if(field.convert){ %>
-    @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
+    @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
         <% }else{ %>
         <% }else{ %>
     @TableField(fill = FieldFill.${field.fill})
     @TableField(fill = FieldFill.${field.fill})
         <% } %>
         <% } %>
     <% }else if(field.convert){ %>
     <% }else if(field.convert){ %>
-    @TableField("${field.name}")
+    @TableField("${field.annotationColumnName}")
     <% } %>
     <% } %>
     <%
     <%
     /*乐观锁注解*/
     /*乐观锁注解*/

+ 5 - 5
mybatis-plus-generator/src/main/resources/templates/entity.kt.ftl

@@ -47,22 +47,22 @@ class ${entity} : Serializable {
 <#if field.keyFlag>
 <#if field.keyFlag>
 <#-- 主键 -->
 <#-- 主键 -->
 <#if field.keyIdentityFlag>
 <#if field.keyIdentityFlag>
-    @TableId(value = "${field.name}", type = IdType.AUTO)
+    @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
 <#elseif idType ??>
 <#elseif idType ??>
-    @TableId(value = "${field.name}", type = IdType.${idType})
+    @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
 <#elseif field.convert>
 <#elseif field.convert>
-    @TableId("${field.name}")
+    @TableId("${field.annotationColumnName}")
 </#if>
 </#if>
 <#-- 普通字段 -->
 <#-- 普通字段 -->
 <#elseif field.fill??>
 <#elseif field.fill??>
 <#-- -----   存在字段填充设置   ----->
 <#-- -----   存在字段填充设置   ----->
 <#if field.convert>
 <#if field.convert>
-    @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
+    @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
 <#else>
 <#else>
     @TableField(fill = FieldFill.${field.fill})
     @TableField(fill = FieldFill.${field.fill})
 </#if>
 </#if>
 <#elseif field.convert>
 <#elseif field.convert>
-    @TableField("${field.name}")
+    @TableField("${field.annotationColumnName}")
 </#if>
 </#if>
 <#-- 乐观锁注解 -->
 <#-- 乐观锁注解 -->
 <#if (versionFieldName!"") == field.name>
 <#if (versionFieldName!"") == field.name>

+ 5 - 5
mybatis-plus-generator/src/main/resources/templates/entity.kt.vm

@@ -46,22 +46,22 @@ class ${entity} : Serializable {
 #if(${field.keyFlag})
 #if(${field.keyFlag})
 ## 主键
 ## 主键
 #if(${field.keyIdentityFlag})
 #if(${field.keyIdentityFlag})
-    @TableId(value = "${field.name}", type = IdType.AUTO)
+    @TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
 #elseif(!$null.isNull(${idType}) && "$!idType" != "")
 #elseif(!$null.isNull(${idType}) && "$!idType" != "")
-    @TableId(value = "${field.name}", type = IdType.${idType})
+    @TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
 #elseif(${field.convert})
 #elseif(${field.convert})
-    @TableId("${field.name}")
+    @TableId("${field.annotationColumnName}")
 #end
 #end
 ## 普通字段
 ## 普通字段
 #elseif(${field.fill})
 #elseif(${field.fill})
 ## -----   存在字段填充设置   -----
 ## -----   存在字段填充设置   -----
 #if(${field.convert})
 #if(${field.convert})
-    @TableField(value = "${field.name}", fill = FieldFill.${field.fill})
+    @TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
 #else
 #else
     @TableField(fill = FieldFill.${field.fill})
     @TableField(fill = FieldFill.${field.fill})
 #end
 #end
 #elseif(${field.convert})
 #elseif(${field.convert})
-    @TableField("${field.name}")
+    @TableField("${field.annotationColumnName}")
 #end
 #end
 ## 乐观锁注解
 ## 乐观锁注解
 #if(${versionFieldName}==${field.name})
 #if(${versionFieldName}==${field.name})

+ 1 - 1
mybatis-plus-generator/src/main/resources/templates/mapper.xml.btl

@@ -32,7 +32,7 @@
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
 <% for(field in table.commonFields){ %>
 <% for(field in table.commonFields){ %>
-        ${field.name},
+        ${field.columnName},
 <% } %>
 <% } %>
         ${table.fieldNames}
         ${table.fieldNames}
     </sql>
     </sql>

+ 1 - 1
mybatis-plus-generator/src/main/resources/templates/mapper.xml.ftl

@@ -30,7 +30,7 @@
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
 <#list table.commonFields as field>
 <#list table.commonFields as field>
-        ${field.name},
+        ${field.columnName},
 </#list>
 </#list>
         ${table.fieldNames}
         ${table.fieldNames}
     </sql>
     </sql>

+ 1 - 1
mybatis-plus-generator/src/main/resources/templates/mapper.xml.vm

@@ -30,7 +30,7 @@
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
 #foreach($field in ${table.commonFields})
 #foreach($field in ${table.commonFields})
-        ${field.name},
+        ${field.columnName},
 #end
 #end
         ${table.fieldNames}
         ${table.fieldNames}
     </sql>
     </sql>

+ 37 - 0
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/keywords/H2KeyWordsHandlerTest.java

@@ -0,0 +1,37 @@
+package com.baomidou.mybatisplus.test.generator.keywords;
+
+import com.baomidou.mybatisplus.generator.keywords.H2KeyWordsHandler;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * @author nieqiurong 2020/5/8.
+ */
+class H2KeyWordsHandlerTest {
+    
+    @Test
+    void test() {
+        H2KeyWordsHandler keyWordsHandler = new H2KeyWordsHandler();
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("CHECK"));
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("check"));
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("USER_NAME"));
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("user_name"));
+        Assertions.assertEquals(keyWordsHandler.formatColumn("CHECK"), "\"CHECK\"");
+    
+        keyWordsHandler.getKeyWords().remove("CHECK");
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("CHECK"));
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("check"));
+    
+        keyWordsHandler = new H2KeyWordsHandler(new ArrayList<>(Arrays.asList("TEST","AAA")));
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("TEST"));
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("test"));
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("AAA"));
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("aaa"));
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("FILE"));
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("file"));
+    }
+    
+}

+ 37 - 0
mybatis-plus-generator/src/test/java/com/baomidou/mybatisplus/test/generator/keywords/MySqlKeyWordsHandlerTest.java

@@ -0,0 +1,37 @@
+package com.baomidou.mybatisplus.test.generator.keywords;
+
+import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * @author nieqiurong 2020/5/8.
+ */
+class MySqlKeyWordsHandlerTest {
+    
+    @Test
+    void test() {
+        MySqlKeyWordsHandler keyWordsHandler = new MySqlKeyWordsHandler();
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("FILE"));
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("file"));
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("USER_NAME"));
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("user_name"));
+        Assertions.assertEquals(keyWordsHandler.formatColumn("FILE"), "`FILE`");
+    
+        keyWordsHandler.getKeyWords().remove("FILE");
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("FILE"));
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("file"));
+        
+        keyWordsHandler = new MySqlKeyWordsHandler(new ArrayList<>(Arrays.asList("TEST","AAA")));
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("TEST"));
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("test"));
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("AAA"));
+        Assertions.assertTrue(keyWordsHandler.isKeyWords("aaa"));
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("FILE"));
+        Assertions.assertFalse(keyWordsHandler.isKeyWords("file"));
+    }
+    
+}