首页 > 解决方案 > 有没有办法避免在 Spring Data MongoDB 查询中将文档字段显式写入字符串?

问题描述

我最近开始使用 Spring Data MongoDB,我想知道是否有任何方法可以避免显式写入实体的属性,因为它们存储在数据库中。例如,给定以下表示 MongoDB 集合的类:

public class Employee {

  @Id
  public String id;
  
  private double salary;

  ...
}

如果我想使用 MongoTemplate 进行查询,例如:

public List findEmployeeBySalaryRange(double salary) {
        Query query = new Query();
        query.addCriteria(Criteria.where("salary").lt(salary));
        ...
}

我想避免编写"salary",因为如果字段名称发生更改,这将使代码在将来更难维护。我正在考虑从类属性中获取字段名称,但我不太确定如何。有没有办法做到这一点?我查看了文档,但没有发现任何相关内容,除非我错过了。

提前致谢。

标签: spring-data-mongodb

解决方案


您可以创建一个实用程序类来存储所有数据库字段名称,@Field在具有该类常量的字段上使用注释,并在查询中使用该常量以避免容易出错的硬编码字符串。

在员工模型中

@Field(DbFields.SALARY)
private double salary;

在查询中,

query.addCriteria(Criteria.where(DbFields.SALARY).lt(salary));

在 DbFields 实用程序类中

public static final String SALARY = "salary";

推荐阅读