cassandrajavaclient查询结果集封装
cassandra 简述
Apache Cassandra 是一种分布式非关系型数据库,具有高性能、可扩展、无中心化等特征。
一种column-based数据库。
Cassandra所支持的基本数据模型。这些基本数据模型有:Column,Super Column,Column Family以及Keyspace。
依赖
<dependency> <groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-extras</artifactId>
<version>3.4.0</version>
<optional>true</optional>
</dependency>
Java 查询
使用java 的客户端查询 cassandra 时,返回值结构解析比较麻烦,故此封装了一个工具。
- 根据返回值信息中的列的信息,生成列与类型的关系。
queryColumns()
- 根据传入的Java Bean 返回 数据集。
/**
* 获取结果集
* @param session session
* @param bindStatement 查询的语句
* @param clazz 返回类型
* @return list
*/
public static <T> List<T> covertResult(Session session, BoundStatement bindStatement,
Class<T> clazz) {
List<JSONObject> result = new ArrayList<>();
ResultSet execute = session.execute(bindStatement);
Map<String, String> columns = queryColumns(execute);
log.info("查询结果的列信息--->{}", columns);
for (Row row : execute) {
JSONObject json = new JSONObject();
columns.forEach((k, v) -> {
log.info("------------>{}", k);
if (columns.get(k).contains("timestamp")) {
if (row.getObject(k) != null) {
json.put(k, ((Date) row.getObject(k)).getTime());
}
} else {
json.put(k, row.getObject(k));
}
});
log.info("---------------->{}", json.toJSONString());
result.add(json);
}
return result.stream().map(m -> JSON.toJavaObject(m, clazz)).collect(Collectors.toList());
}
/**
* 查询数据表字段名(key:字段名,value:字段类型名)
* @param rs ResultSet
* @return map
*/
public static Map<String, String> queryColumns(ResultSet rs) {
try {
ColumnDefinitions rscd = rs.getColumnDefinitions();
int count = rscd.size();
HashMap<String, String> reflect = Maps.newHashMap();
for (int i = 0; i < count; i++) {
String column = rscd.getName(i);
String type = rscd.getType(i).getName().name().toLowerCase();
reflect.put(column, type);
}
return reflect;
} catch (Exception e) {
log.error("获取 column 信息失败");
}
return Maps.newHashMap();
}
总结
如果感觉文章有帮助,请关注下吆。有问题可以留言。
以上是 cassandrajavaclient查询结果集封装 的全部内容, 来源链接: utcz.com/z/517367.html