用Java代码创建表
1.概述
虽然 DDL语句支持完整的表操作命令,但也可以使用简单的 Java API 直接从 POJO 创建表和构建索引。该 API 支持自定义注解和简单构建器,它与 Mapper 接口一起,方便了键值视图和记录视图的使用。
Java API 可以执行以下操作:
CREATE ZONE
;CREATE TABLE
;CREATE INDEX
;DROP ZONE
;DROP TABLE
;DROP INDEX
。
可以使用位于org.apache.ignite.catalog.annotations
包中的@Table
以及其他的注解。
2.示例
2.1.兼容键值视图的KV POJO
下面的示例从Java代码创建了一个名为kv_pojo
的表:
java
class ZoneTest {}
class PojoKey {
@Id
Integer id;
@Id(sort = DESC)
@Column(value = "id_str", length = 20)
String idStr;
}
@Table(
value = "kv_pojo",
zone = @Zone(
value = "zone_test",
replicas = 2,
storageProfiles = "default"
),
colocateBy = { @ColumnRef("id"), @ColumnRef("id_str") },
indexes = { @Index(value = "ix", columns = {
@ColumnRef(value = "f_name"),
@ColumnRef(value = "l_name") })
}
)
class PojoValue {
@Column("f_name")
String firstName;
@Column("l_name")
String lastName;
String str;
}
Table myTable = ignite.catalog().create(PojoKey.class, PojoValue.class);
ignite.tables().table(myTable).keyValueView(PojoKey.class, PojoValue.class);
提示
需要使用命令行工具在节点配置中创建存储配置。
结果等价于以下多个 SQL 语句:
sql
CREATE ZONE IF NOT EXISTS zone_test WITH PARTITIONS=2, STORAGE_PROFILES='default';
CREATE TABLE IF NOT EXISTS kv_pojo (
id int,
id_str varchar(20),
f_name varchar,
l_name varchar,
str varchar,
PRIMARY KEY (id, id_str)
)
COLOCATE BY (id, id_str)
WITH PRIMARY_ZONE='ZONE';
CREATE INDEX ix (f_name, l_name desc nulls last);
2.2.兼容记录视图的单个POJO
下面的示例使用与记录视图兼容的 POJO 创建pojo_sample
表:
java
@Table(
value = "pojo_sample",
zone = zone = @Zone(
value = "zone_test",
replicas = 2,
storageProfiles = "default"
),
colocateBy = { @ColumnRef("id"), @ColumnRef("id_str") },
indexes = { @Index(value = "ix_sample", columns = {
@ColumnRef(value = "f_name"),
@ColumnRef(value = "l_name")}
}
)
class Pojo {
@Id
Integer id;
@Id(sort = DESC)
@Column(value = "id_str", length = 20)
String idStr;
@Column("f_name")
String firstName;
@Column("l_name")
String lastName;
String str;
}
Table myTable = ignite.catalog().create(Pojo.class);
ignite.tables().table(myTable).recordView(Pojo.class)
2.3.@Table注解的Builder替代方案
下面的示例使用构建器创建表:
提示
使用构建器时,仅支持字段上的@Id
注解和@Column
注解。
java
class Pojo {
@Id
Integer id;
@Id(sort = DESC)
@Column(value = "id_str", length = 20)
String idStr;
@Column("f_name")
String firstName;
@Column("l_name")
String lastName;
String str;
}
ignite.catalog()
.create(ZoneDefinition.builder("zone_test")
.partitions(2))
.execute();
ignite.catalog()
.create(TableDefinition.builder("pojo_test")
.ifNotExists()
.colocateBy("id", "id_str")
.zone("zone_test")
.record(Pojo.class) // .key(Key.class).value(Value.class)
.build())
3.下一步
使用 Java API 创建表后,就可以使用 SQL 命令对其进行操作。
18624049226