使用@Column获取变量

时间:2017-04-28 10:12:41

标签: java spring cassandra

我正在使用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值一样。

2 个答案:

答案 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的简单方法。 CqlTemplateCassandraTemplate用于直接与CQL交互的组件。您可以发出查询并获得Map<String, Object>作为回报:

CqlTemplate cqlTemplate = …;

Map<String, Object> map = cqlTemplate.queryForMap(select);

地图由CQL列名称键控(通常为小写)。