cassandra java client 查询结果集封装

两盒软妹~` 提交于 2020-08-13 06:45:41

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();
    }

总结

如果感觉文章有帮助,请关注下吆。有问题可以留言。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!