目录

起因

功能介绍

基本使用

 跳转

默认值

原理

源码地址


起因

一般公司都会要求给数据库表加备注,便于其他同事合作开发,以及方便测试人员测试。

有的人可能喜欢先设计表结构,再逆向的生成实体类(Entity)。通过powerdesign等工具设计表的时候,可以顺带把字段的备注给加上,所以后期不需要单独加注释。

但是也有人喜欢先考虑类的结构,再考虑数据的存储。即先有实体类,再根据实体类创建对应的数据库表。这个时候写备注就比较痛苦了,需要通过一些可视化工具一张表一张表地加。

现有的一些可视化工具(例如navicat)加注释并不方便,所以自己做了个小工具用于解决“加注释难”这个问题。

功能介绍

基本使用

注意:字段名 = 表名 + 字段名

第一步:选择需要加注释的数据库

java 获取Excel注解字段value java获取字段注释_javafx

第二步:修改备注

java 获取Excel注解字段value java获取字段注释_mysql_02

按回车键后提交结果,并将焦点移动至下一行

java 获取Excel注解字段value java获取字段注释_sql_03

点击回车后继续编辑。

到最后一行时,如果点击回车会自动跳转到下一页。

java 获取Excel注解字段value java获取字段注释_java_04

 在加注释的过程中,就无需点击鼠标切换表了,提高了效率。

 跳转

如果哪一次备注中断了,可以记录一下页数,下一次使用时跳转到指定页即可。

java 获取Excel注解字段value java获取字段注释_javafx_05

默认值

 有一些字段,例如createTime表示创建时间,updateTime表示更新时间。这些比较明确的字段,可以通过设置默认值,避免重复输入。

目前是通过代码配置的,如果后续这个软件有人用的话,我再改成通过文件配置。

java 获取Excel注解字段value java获取字段注释_sql_06

 设置默认之后,如果输入值为空,直接敲回车,可以填充默认的注释。

java 获取Excel注解字段value java获取字段注释_字段_07

例如上述的createTime未输入任何值,敲回车后显示如下。

java 获取Excel注解字段value java获取字段注释_javafx_08

原理

mysql中没有单独修改字段注释的方式,只能通过“alter table..........modify column ”语句在修改表结构的同时,修改备注。

使用alter table时,如果没带上某些定义信息,则空信息会覆盖之前的定义,导致表结构发生了变化。但修改表的结构并不是我们的初衷,我们只想改个注释。

所以大概思路如下:

1、通过 information_schema.COLUMNS表获取某个字段的所有定义信息,抽象为一个类

ColumnInfo

public class ColumnInfo {
    /**标识符号,表名+字段名组成**/
    private String identify;
    /**列名**/
    private String columnName;
    /**表名**/
    private String tableName;
    /**数据库名**/
    private String dbName;
    /**在表中的顺序**/
    private int position;
    /**是否可以为null**/
    private boolean nullable;
    /**默认值**/
    private String defaultValue;
    /**字段类型**/
    private String columnType;
    /**字符集**/
    private String characterSet;
    /**排序规则**/
    private String collationName;
    /**PRI,代表主键,UNI,代表唯一键,MUL,可重复**/
    private String indexType;
    /**额外信息,例如自增、根据时间戳更新等**/
    private String extra;
    /**备注**/
    private String comment;
}

 2、修改备注时带上所有的定义信息

private String buildColumnSql(ColumnInfo columnInfo) {
        StringBuilder sqlBuilder = new StringBuilder();
        sqlBuilder.append("alter table ").append(columnInfo.getDbName()).append(".").append(columnInfo.getTableName())
                .append(" modify column ").append(columnInfo.getColumnName()).append(" ").append(columnInfo.getColumnType());

        if (!columnInfo.isNullable()) {
            sqlBuilder.append(" not null ");
        }

        if (!StringUtils.isBlank(columnInfo.getDefaultValue())) {
            sqlBuilder.append(" default ").append(columnInfo.getDefaultValue());
        }

        if (!StringUtils.isBlank(columnInfo.getExtra())) {
            sqlBuilder.append(" ").append(columnInfo.getExtra()).append(" ");
        }

        if (!StringUtils.isBlank(columnInfo.getComment())) {
            sqlBuilder.append(" comment ").append("\"").append(columnInfo.getComment()).append("\"");
        }
        return sqlBuilder.toString();
    }

 其实navicat也是通过这种方法来实现的。

java 获取Excel注解字段value java获取字段注释_javafx_09

给name字段加一个注释,“姓名”。点击保存后,查看navicat sql执行日志

java 获取Excel注解字段value java获取字段注释_javafx_10

 可以看到在修改备注的同时,也会带上这个其他的定义信息。

源码地址

小工具的源码地址如下