我尝试了一下 Cassandra 的 Java 对象映射器
尝试使用 Cassandra 的 Java 物件映射工具进行操作
当尝试运行从DataStax官方手册中复制粘贴的示例代码时的记录。
前提 – Qian ti
In Chinese, the phrase “前提” can be paraphrased as “前提条件” (qian ti tiao jian).
-
- Ubuntu 17.04
-
- Cassandra 3.10
- Java 側の Cassandra Driver 3.2.0
准备中
Cassandra的一方
-
- Cassandra的安装
$ wget http://ftp.jaist.ac.jp/pub/apache/cassandra/3.10/apache-cassandra-3.10-bin.tar.gz
$ tar -zxvf apache-cassandra-3.10-bin.tar.gz
$ sudo mv apache-cassandra-3.10/ /opt/cassandra
启动Cassandra服务器
$ /opt/cassandra/bin/cassandra
创建Keyspace(名称:ks)
$ /opt/cassandra/bin/cqlsh 127.0.0.1 -e “\
CREATE KEYSPACE ks\
WITH REPLICATION = { ‘class’: ‘SimpleStrategy’, ‘replication_factor’: 1 };”
创建Table(名称:users)
$ /opt/cassandra/bin/cqlsh 127.0.0.1 -e “\
CREATE TABLE ks.users (\
user_id uuid,\
name text,\
strength int,\
PRIMARY KEY(user_id, name)\
);”
在Java一端
pom.xml
cassandra-driver-core と cassandra-driver-mapping の依存を追加する
pom.xml
…
com.datastax.cassandra
cassandra-driver-core
3.2.0
com.datastax.cassandra
cassandra-driver-mapping
3.2.0
…
ソースコード
マッピング対象のクラス
User.java
package sample;
import com.datastax.driver.mapping.annotations.ClusteringColumn;
import com.datastax.driver.mapping.annotations.Column;
import com.datastax.driver.mapping.annotations.Param;
import com.datastax.driver.mapping.annotations.PartitionKey;
import com.datastax.driver.mapping.annotations.Table;
import java.util.UUID;
@Table(keyspace = “ks”, name = “users”,
readConsistency = “QUORUM”,
writeConsistency = “QUORUM”,
caseSensitiveKeyspace = false,
caseSensitiveTable = false)
public class User {
@PartitionKey
@Column(name = “user_id”)
private UUID userId;
@ClusteringColumn
private String name;
private int strength;
public User(UUID userId, String name, int strength) {
this.userId = userId;
this.name = name;
this.strength = strength;
}
}
メインクラス
Main.java
package sample;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
import com.datastax.driver.mapping.Mapper;
import com.datastax.driver.mapping.MappingManager;
import java.util.UUID;
public class Main {
public static void main(String[] args) {
Cluster cluster = null;
try {
cluster = Cluster.builder()
.addContactPoint(“127.0.0.1”)
.build();
Session session = cluster.connect();
MappingManager manager = new MappingManager(session);
Mapper mapper = manager.mapper(User.class);
User u = new User(UUID.randomUUID(), “John Doe”, 9999);
mapper.save(u);
} finally {
if (cluster != null) {
cluster.close();
}
}
}
}
运行结果
在执行上述主类之后,可以通过 cqlsh 来检查数据是否已经插入。
$ /opt/cassandra/bin/cqlsh 127.0.0.1 -e "SELECT * FROM ks.users;"
user_id | name | strength
--------------------------------------+----------+----------
e918961b-57c1-4f5d-8c4e-9d08e9ea4e7a | John Doe | 9999
(1 rows)
请参考
-
- https://github.com/datastax/java-driver/blob/3.x/manual/README.md
- https://github.com/datastax/java-driver/blob/3.x/manual/object_mapper