目录
起因
功能介绍
基本使用
跳转
默认值
原理
源码地址
起因
一般公司都会要求给数据库表加备注,便于其他同事合作开发,以及方便测试人员测试。
有的人可能喜欢先设计表结构,再逆向的生成实体类(Entity)。通过powerdesign等工具设计表的时候,可以顺带把字段的备注给加上,所以后期不需要单独加注释。
但是也有人喜欢先考虑类的结构,再考虑数据的存储。即先有实体类,再根据实体类创建对应的数据库表。这个时候写备注就比较痛苦了,需要通过一些可视化工具一张表一张表地加。
现有的一些可视化工具(例如navicat)加注释并不方便,所以自己做了个小工具用于解决“加注释难”这个问题。
功能介绍
基本使用
注意:字段名 = 表名 + 字段名
第一步:选择需要加注释的数据库
第二步:修改备注
按回车键后提交结果,并将焦点移动至下一行
点击回车后继续编辑。
到最后一行时,如果点击回车会自动跳转到下一页。
在加注释的过程中,就无需点击鼠标切换表了,提高了效率。
跳转
如果哪一次备注中断了,可以记录一下页数,下一次使用时跳转到指定页即可。
默认值
有一些字段,例如createTime表示创建时间,updateTime表示更新时间。这些比较明确的字段,可以通过设置默认值,避免重复输入。
目前是通过代码配置的,如果后续这个软件有人用的话,我再改成通过文件配置。
设置默认之后,如果输入值为空,直接敲回车,可以填充默认的注释。
例如上述的createTime未输入任何值,敲回车后显示如下。
原理
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也是通过这种方法来实现的。
给name字段加一个注释,“姓名”。点击保存后,查看navicat sql执行日志
可以看到在修改备注的同时,也会带上这个其他的定义信息。
源码地址
小工具的源码地址如下