【问题标题】:get variable using @Column使用@Column 获取变量
【发布时间】:2017-04-29 02:22:51
【问题描述】:

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

【问题讨论】:

    标签: java spring cassandra


    【解决方案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 姓名

    【讨论】:

    • 感谢您的回答。有效。在更多问题上,我需要对大量数据执行此操作。这是更好的方法还是使用 JoSql(Java 对象上的 sql 查询)?
    • 我对JoSql不熟悉,但是看起来很有趣。虽然不能告诉你一个比另一个的好处..
    【解决方案2】:

    有一个基于CqlTemplate 的更简单的方法。 CqlTemplateCassandraTemplate 用来直接与 CQL 交互的组件。您可以发出查询并获得Map<String, Object> 作为回报:

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

    映射由 CQL 列名(通常小写)作为键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多