我正在使用Spring将我的cassandra表映射到pojo。
@Table(value="student_data")
public class StudentTable
{
@PrimaryKey
private String primaryKey;
@Column(value="column_name1")
private String columnName1;
@Column(value="column_name2")
private String columnName2;
@Column(value="column_name3")
private String columnName3;
/*
getters and setters
*/
}
现在,我从数据库中获取数据并创建一个用于存储数据的StudentTable列表。 cassandraOperations.select(select, StudentTable.class)
我想根据列名获取值。 就像获取特定StudentTable对象的column_name1的get值一样。
答案 0 :(得分:1)
您可以尝试使用org.apache.commons.lang3.reflect.FieldUtils
获取所需字段的值,以通过@column
注释过滤此类的字段。
例如:
public void testStudent() throws IllegalArgumentException, IllegalAccessException {
StudentTable student = new StudentTable();
student.setColumnName1("Student 1 Name");
String columnValue = null;
Field[] fields = org.apache.commons.lang3.reflect.FieldUtils.getAllFields(StudentTable.class);
for(Field f : fields) {
Column columnAnnotation = f.getAnnotation(Column.class);
if(columnAnnotation != null && StringUtils.equals(columnAnnotation.name(), "column_name1")) {
f.setAccessible(true);
columnValue = (String) f.get(student);
}
}
System.out.println(columnValue);
}
打印结果:
学生1姓名
答案 1 :(得分:1)
有一种基于CqlTemplate
的简单方法。 CqlTemplate
是CassandraTemplate
用于直接与CQL交互的组件。您可以发出查询并获得Map<String, Object>
作为回报:
CqlTemplate cqlTemplate = …;
Map<String, Object> map = cqlTemplate.queryForMap(select);
地图由CQL列名称键控(通常为小写)。