因為JanusGraph中使用到了cassandra, 考慮簡單了解下cassandra。 簡單嘗試和springboot做一個簡單內建。
TABLE
CREATE TABLE master_order (
tenant_id text,
sequence_id text,
attachments map<text, text>,
booked_time timestamp,
columns map<text, text>,
create_time timestamp,
deleted boolean,
labels set<text>,
order_code text,
order_id bigint,
order_status int,
order_type int,
remark text,
update_time timestamp,
update_user text,
PRIMARY KEY (tenant_id, sequence_id)
) WITH CLUSTERING ORDER BY (sequence_id DESC);
應用
YML
spring:
data:
cassandra:
cluster-name: datacenter1
keyspace-name: my_test
contact-points: 127.0.0.1
port: 9042
username:
password:
Config
package org.example;
import com.datastax.driver.core.AuthProvider;
import com.datastax.driver.core.PlainTextAuthProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.cassandra.config.AbstractCassandraConfiguration;
/**
* TODO
*
* @author zhongshengwang
* @description TODO
* @date 2023/4/7 22:40
* @email 18668485565163.com
*/
@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {
@Value("${spring.data.cassandra.keyspace-name}")
private String keyspaceName;
@Value("${spring.data.cassandra.contact-points}")
private String contactPoints;
@Value("${spring.data.cassandra.port}")
private int port;
@Value("${spring.data.cassandra.cluster-name}")
private String clusterName;
@Value("${spring.data.cassandra.username}")
private String username;
@Value("${spring.data.cassandra.password}")
private String password;
@Override
protected String getKeyspaceName() {
return keyspaceName;
}
@Override
public String getContactPoints() {
return contactPoints;
}
@Override
public int getPort() {
return this.port;
}
@Override
public String getClusterName() {
return clusterName;
}
@Override
protected boolean getMetricsEnabled() {
return false;
}
@Override
protected AuthProvider getAuthProvider() {
return new PlainTextAuthProvider(username, password);
}
@Override
public String[] getEntityBasePackages() {
return new String[]{"org.example"};
}
}
DAO
package org.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.data.cassandra.repository.CassandraRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* TODO
*
* @author zhongshengwang
* @description TODO
* @date 2023/4/7 22:44
* @email 18668485565163.com
*/
@Repository
public interface MasterOrderDao extends CassandraRepository<MasterOrderDO,String> {
/**
* jpa這是JPA的用法 findBy後面跟實體類的屬性 可以自動查詢 不用自己實作
* @param id
* @param sequenceId
* @return
*/
List<MasterOrderDO> findByTenantIdAndSequenceId(String id, String sequenceId);
}
DO
package org.example;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Tolerate;
import org.springframework.data.cassandra.core.cql.PrimaryKeyType;
import org.springframework.data.cassandra.core.mapping.Column;
import org.springframework.data.cassandra.core.mapping.PrimaryKeyColumn;
import org.springframework.data.cassandra.core.mapping.Table;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
import java.util.Set;
/**
* TODO
*
* @author zhongshengwang
* @description TODO
* @date 2023/4/7 22:42
* @email 18668485565163.com
*/
@Data
@Builder
@ToString
@Table("master_order")
public class MasterOrderDO implements Serializable {
private static final long serialVersionUID = -8255203043816589182L;
@PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED,value = "tenant_id")
String tenantId;
@PrimaryKeyColumn(type = PrimaryKeyType.CLUSTERED,value = "sequence_id")
String sequenceId;
@Column("attachments")
Map<String,String> attachments;
@Column("booked_time")
Date bookedTime;
@Column("columns")
Map<String,String> columns;
@Column("create_time")
Date createTime;
@Column("deleted")
Boolean deleted;
@Column("labels")
Set<String> labels;
@Column("order_code")
String orderCode;
@Column("order_id")
Long orderId;
@Column("order_status")
Integer orderStatus;
@Column("order_type")
Integer orderType;
@Column("remark")
String remark;
@Column("update_time")
Date updateTime;
@Column("update_user")
String updateUser;
@Tolerate
public MasterOrderDO(){}
}
Service
package org.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.stereotype.Service;
/**
* TODO
*
* @author zhongshengwang
* @description TODO
* @date 2023/4/7 22:48
* @email 18668485565163.com
*/
@Service
public class MasterOrderService {
@Autowired
private CassandraTemplate cassandraTemplate;
public void delete(MasterOrderDO masterOrderDO){
cassandraTemplate.delete(masterOrderDO);
}
public MasterOrderDO save(MasterOrderDO entity) {
return cassandraTemplate.insert(entity);
}
public void updateMasterOrder(MasterOrderDO masterOrderDO){
cassandraTemplate.update(masterOrderDO);
}
public Iterable<MasterOrderDO> findAll() {
return cassandraTemplate.select("SELECT * FROM master_order;", MasterOrderDO.class);
}
}
UnitTests
package org.example;
import java.util.Date;
import java.util.List;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
/**
* TODO
*
* @author zhongshengwang
* @description TODO
* @date 2023/4/7 22:48
* @email 18668485565163.com
*/
@SpringBootTest(classes = Main.class)
@RunWith(SpringRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MasterOrderServiceTest {
@Resource
private MasterOrderService masterOrderService;
@Test
public void delete() {
MasterOrderDO entity = new MasterOrderDO();
entity.setTenantId("12580");
entity.setSequenceId("1");
masterOrderService.delete(entity);
}
@Test
public void save() {
MasterOrderDO entity = new MasterOrderDO();
entity.setTenantId("12580");
entity.setSequenceId("1");
entity.setAttachments(Maps.newHashMap());
entity.setBookedTime(new Date());
entity.setColumns(Maps.newHashMap());
entity.setCreateTime(new Date());
entity.setDeleted(false);
entity.setLabels(Sets.newHashSet());
entity.setOrderCode("123456xxxx");
entity.setOrderId(12345L);
entity.setOrderStatus(0);
entity.setOrderType(0);
entity.setRemark("好的");
entity.setUpdateTime(new Date());
entity.setUpdateUser("zsw12345");
masterOrderService.save(entity);
}
@Test
public void updateMasterOrder() {
MasterOrderDO entity = new MasterOrderDO();
entity.setTenantId("12580");
entity.setSequenceId("1");
entity.setAttachments(Maps.newHashMap());
entity.setBookedTime(new Date());
entity.setColumns(Maps.newHashMap());
entity.setCreateTime(new Date());
entity.setDeleted(false);
entity.setLabels(Sets.newHashSet());
entity.setOrderCode("1234567xxxx");
entity.setOrderId(12345L);
entity.setOrderStatus(0);
entity.setOrderType(0);
entity.setRemark("好的1");
entity.setUpdateTime(new Date());
entity.setUpdateUser("zsw12345");
masterOrderService.updateMasterOrder(entity);
}
@Test
public void findAll() {
List<MasterOrderDO> all = masterOrderService.findAll();
for (MasterOrderDO masterOrderDO : all) {
System.out.println(masterOrderDO.toString());
}
}
}
運作完成檢視效果:
使用idea專業版連接配接cassandra可以可視化檢視cassandra中的資料: