Skip to content

定义索引

以下注解,用于描述索引信息的,即可以标注于实体上描述组合索引,也可以标注于字段上描述独立索引

@Index

在字段上声明该字段为索引字段

属性类型必填默认释义
nameString当前字段的列名称索引的名字, 框架会自动在名字前追加配置的前缀
typeIndexTypeEnum(NORMAL, UNIQUE)NORMAL索引类型(普通索引,唯一索引)
methodString''索引方法(MySQL: BTREE/HASH,PgSQL: BTREE/GiST/GIN 等)
commentString''索引注释
查看样例
java
// 测试表
@AutoTable
public class TestTable {
    private Long id;
    @Index
    private String name;
    @Index(type = IndexTypeEnum.UNIQUE) 
    private String phone;
    ......
}

@TableIndex

可用于实体上,声明多字段联合的索引使用的,fields与indexFields必须配置一个,不然不生效

属性类型必填默认释义
nameString''索引的名字, 框架会自动在名字前追加配置的前缀
typeIndexTypeEnum(NORMAL, UNIQUE)NORMAL索引类型(普通索引,唯一索引)
methodString''索引方法(MySQL: BTREE/HASH,PgSQL: BTREE/GiST/GIN 等)
fieldsString[]{}字段名,支持多字段。注意,多字段的情况下,字段书序即构建索引时候的顺序,牵扯索引左匹配问题。该配置优先级低于indexFields ,具体可参考indexFields的说明
indexFieldsIndexField(field: String, sort: IndexSortTypeEnum(ASC, DESC))[]{}字段名,兼容需要指定字段排序方式的模式。注意,多字段的情况下,字段书序即构建索引时候的顺序,牵扯索引左匹配问题。该配置优先级高于fields ,也就是说,生成索引字段的顺序,该配置中的列会排在fields之前,同时,如果该配置与fields之间存在重名的情况,以该配置为主
commentString''索引注释
查看样例
java
// 测试表
@AutoTable
@TableIndex(name = "name_phone",  
            type=IndexTypeEnum.UNIQUE,  
            fields={"name", "phone"},  
            comment="姓名电话联合索引") 
public class TestTable {
    private Long id;
    private String name;
    private String phone;
    ......
}
java
// 测试表
@AutoTable
@TableIndex(name = "name_phone", 
            indexFields={ 
              @IndexField(field="name", sort=IndexSortTypeEnum.ASC), 
              @IndexField(field="phone", sort=IndexSortTypeEnum.DESC) 
            }, 
            comment="姓名电话联合索引,姓名正序,电话倒序") 
public class TestTable {
    private Long id;
    private String name;
    private String phone;
    ......
}

@TableIndexes

@TableIndexe注解的集合注解,可以同时定义多个@TableIndexe

属性类型必填默认释义
valueTableIndex[]索引集合
查看样例
java
// 测试表
@AutoTable
@TableIndexes({ 
        @TableIndex(name = "name_phone", fields={"name", "phone"}, comment="姓名电话联合索引"), 
        @TableIndex(name = "cardNumber", type=IndexTypeEnum.UNIQUE, fields={"cardNumber"}, comment="身份证号唯一索引") 
}) 
public class TestTable {
    private Long id;
    private String name;
    private String phone;
    private String cardNumber;
    ......
}

@MysqlFullTextIndex

MySQL 专属注解,用于定义全文索引(FullText Index)。

注意@MysqlFullTextIndex@Index替代方案,不是补充。字段上标注 @MysqlFullTextIndex 时,不需要同时写 @Index

属性类型必填默认释义
nameString''索引的名字, 框架会自动在名字前追加配置的前缀
commentString''索引注释
parserString''全文索引的分词器,如 ngram(中文分词器)
查看样例
java
// 测试表
@AutoTable
public class TestTable {
    private Long id;
    // 单字段全文索引
    @MysqlFullTextIndex
    private String content;
    // 单字段全文索引,指定分词器
    @MysqlFullTextIndex(parser = "ngram", comment = "中文全文索引") 
    private String description;
    ......
}

生成 SQL 示例:

sql
-- 单字段全文索引
FULLTEXT INDEX `auto_idx_test_table_content`(`content`)
-- 单字段全文索引,指定分词器
FULLTEXT INDEX `auto_idx_test_table_description`(`description`) COMMENT '中文全文索引' WITH PARSER ngram

@MysqlTableFullTextIndex

MySQL 专属注解,用于定义类级别的组合全文索引(FullText Index)。可重复标注,也支持使用 @MysqlTableFullTextIndexes 聚合多个。

属性类型必填默认释义
nameString''索引的名字, 框架会自动在名字前追加配置的前缀
commentString''索引注释
parserString''全文索引的分词器,如 ngram(中文分词器)
fieldsString[]{}字段名,支持多字段。多字段的情况下,字段顺序即构建索引时候的顺序
查看样例
java
// 测试表
@AutoTable
@MysqlTableFullTextIndex(fields = {"content", "description"}, comment = "内容全文索引") 
public class TestTable {
    private Long id;
    private String content;
    private String description;
    ......
}

生成 SQL 示例:

sql
-- 类级别组合全文索引
FULLTEXT INDEX `auto_idx_test_table_content_description`(`content`,`description`) COMMENT '内容全文索引'

@MysqlTableFullTextIndexes

@MysqlTableFullTextIndex 注解的集合注解,可以同时定义多个类级别全文索引。

属性类型必填默认释义
valueMysqlTableFullTextIndex[]索引集合
查看样例
java
// 测试表
@AutoTable
@MysqlTableFullTextIndexes({ 
        @MysqlTableFullTextIndex(fields = {"content", "description"}, comment = "内容全文索引"), 
        @MysqlTableFullTextIndex(fields = {"title"}, parser = "ngram") 
}) 
public class TestTable {
    private Long id;
    private String content;
    private String description;
    private String title;
    .....;
}

Released under the Apache 2.0 License.