2017-04-19 50 views
0

我是Apache Cassandra的新手。我如何在用戶定義的java類對象或ArrayLIst中投射cassandra的Resultset對象

我想知道如何將結果集對象轉換爲用戶定義的列表類型或java中的用戶定義對象。

我已經嘗試了很多東西,但仍然卡住了。

**這是到目前爲止,我已經試過了該方法的代碼」:

public List getOutBoundMessageListFromCassandra(){ 
    List<XchangeOutboundMessage> list=new ArrayList(); 
    try { 

     cluster = Cluster.builder().addContactPoint(contactPoints).build(); 

     session = cluster.connect(keySpaceName); 

     cassandraOps = new CassandraTemplate(session); 

     Select s = QueryBuilder.select().from("XchangeOutboundMessage"); 
     ResultSet result = session.execute(s); 
     list=result.all(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return list; 

}

回答

1

讓我們假設你有表:

CREATE TABLE xchangeoutboundmessage (
    id timeuuid PRIMARY KEY, 
    message text, 
    sender bigint 
); 

和相關DTO

public class XchangeOutboundMessage { 

    private UUID id; 
    private String message; 
    private long sender; 

    public UUID getId() { 
     return id; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public long getSender() { 
     return sender; 
    } 

    public void setId(UUID id) { 
     this.id = id; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public void setSender(long sender) { 
     this.sender = sender; 
    } 

    @Override 
    public String toString() { 
     return "XchangeOutboundMessage{" + "id=" + id + ", message=" + message + ", sender=" + sender + '}'; 
    } 

} 

你可以手動從行中獲取日期並將值設置爲dto,或者您可以使用cassandra-driver-mapping爲您完成此操作。

使用手動映射:

for (Row row : result) { 
    XchangeOutboundMessage message = new XchangeOutboundMessage(); 
    message.setId(row.getUUID("id")); 
    message.setMessage(row.getString("message")); 
    message.setSender(row.getLong("sender")); 
    list.add(message); 
} 

使用Cassandra的驅動器映射:

首先添加@Table(name = "XchangeOutboundMessage")詮釋XchangeOutboundMessage DTO

MappingManager manager = new MappingManager(session); 
Mapper<XchangeOutboundMessage> mapper = manager.mapper(XchangeOutboundMessage.class); 
list = mapper.map(result).all(); 

注:卡桑德拉驅動器映射需要添加的依賴

由...這些類型的查詢在cassandra中的效率非常低,總是嘗試在where子句中提供分區鍵。

+0

我試過maven dependency版本3.2.0和3.1.0這個,但它不工作,並給出錯誤,無法訪問com.datastax.driver.core.PagingIterable下面的行 list = mapper.map(result)。所有(); –

+0

您正在使用哪個版本的cassandra驅動程序? –

+0

我正在使用cassandra驅動程序核心2.1.6和cassandra驅動程序映射3.2.0版本..感謝很多 –

相關問題