Skip to content

表结构同步

表结构同步允许你通过实体类定义数据库结构,Kite 会自动根据注解生成和维护数据库表、字段和索引。

全局配置

通过 SchemaConfig 配置表结构同步的行为:

配置项默认值描述
enabledfalse是否启用表结构同步
sqlLowercasetrue生成的 SQL 是否小写
scanPackages[]实体类扫描包路径,支持通配符
createMissingTablestrue是否创建缺失的表
dropExistingTablesfalse是否删除已存在的表
createMissingColumnstrue是否添加缺失的字段
dropExistingColumnsfalse是否删除多余的字段
createMissingIndexestrue是否创建缺失的索引
modifyIndexesfalse是否修改已存在的索引
dropExistingIndexesfalse是否删除多余的索引

启用示例

java
import com.tang.kite.config.schema.SchemaConfig;

SchemaConfig.setEnabled(true);
SchemaConfig.getScanPackages().add("com.example.entity");

@Table 注解

@Table 注解用于将实体类映射到数据库表。表结构同步相关属性:

属性类型描述
valueString表名,默认使用类名
commentString表注释
java
import com.tang.kite.annotation.Table;

@Table(value = "account", comment = "账户表")
public class Account {}

@Column 注解

@Column 注解用于将实体类字段映射到数据库列。表结构同步相关属性:

属性类型描述
valueString列名,默认使用字段名
ignoreBoolean是否忽略此列,不会生成到数据库中
dataTypeString列数据类型,为空则自动推断
lengthInt列长度,用于 VARCHARCHAR 等,默认 255
precisionInt数值精度,用于 DECIMALNUMERIC 等,默认 10
scaleInt小数位数,用于 DECIMALNUMERIC 等,默认 2
nullableBoolean是否允许 NULL,默认 true
defaultValueArray<String>列默认值
commentArray<String>列注释
foreignKeyString外键引用的表名
foreignKeyColumnString外键引用的列名
onDeleteForeignKeyAction删除时外键行为
onUpdateForeignKeyAction更新时外键行为
java
import com.tang.kite.annotation.Column;
import com.tang.kite.sql.ast.ForeignKeyAction;

public class Account {

    @Column(value = "username", length = 50, comment = "用户名")
    private String username;

    @Column(defaultValue = "0", comment = "状态")
    private Integer status;

    @Column(foreignKey = "dept", foreignKeyColumn = "id", onDelete = ForeignKeyAction.CASCADE)
    private Long deptId;

}

索引

@Index 注解

用于在单个字段上创建索引。

属性类型描述
nameString索引名称,默认自动生成
uniqueBoolean是否唯一索引,默认 false
orderIndexOrder排序方式,默认 ASC
java
import com.tang.kite.annotation.Index;
import com.tang.kite.enumeration.IndexOrder;

public class Account {

    @Index(unique = true)
    private String username;

    @Index(name = "idx_status", order = IndexOrder.DESC)
    private Integer status;
 
}

@CompositeIndex 注解

用于在类级别定义多列联合索引。

属性类型描述
nameString索引名称,默认自动生成
uniqueBoolean是否唯一索引,默认 false
columnsArray<String>联合索引包含的列名
ordersArray<IndexOrder>各列的排序方式
java
import com.tang.kite.annotation.CompositeIndex;

@CompositeIndex(columns = {"username", "status"}, unique = true)
@CompositeIndex(name = "idx_time", columns = {"createTime", "updateTime"})
public class Account {}

基于 MIT 许可发布