有没有办法避免在 Spring 数据 MongoDB 查询中将文档字段显式写入字符串?
Is there a way to avoid explicitly writing document fields as Strings in Spring Data MongoDB queries?
我最近开始使用 Spring 数据 MongoDB,我想知道是否有任何方法可以避免显式写入实体的属性,因为它们存储在数据库中。例如,假设以下 class 表示 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"
,因为如果字段名称发生变化,这将使代码在将来更难维护。我正在考虑从 class 属性中获取字段名称之类的东西,但我不太确定如何。有办法吗?我查看了文档,但没有找到任何相关内容,除非我错过了。
提前致谢。
您可以创建一个实用程序 Class 来存储所有数据库字段名称,在字段上使用 @Field
注释和来自 class 的常量,并在查询中使用该常量以避免容易出错硬编码字符串。
在员工模型中
@Field(DbFields.SALARY)
private double salary;
在查询中,
query.addCriteria(Criteria.where(DbFields.SALARY).lt(salary));
在 DbFields 实用程序中 class
public static final String SALARY = "salary";
我最近开始使用 Spring 数据 MongoDB,我想知道是否有任何方法可以避免显式写入实体的属性,因为它们存储在数据库中。例如,假设以下 class 表示 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"
,因为如果字段名称发生变化,这将使代码在将来更难维护。我正在考虑从 class 属性中获取字段名称之类的东西,但我不太确定如何。有办法吗?我查看了文档,但没有找到任何相关内容,除非我错过了。
提前致谢。
您可以创建一个实用程序 Class 来存储所有数据库字段名称,在字段上使用 @Field
注释和来自 class 的常量,并在查询中使用该常量以避免容易出错硬编码字符串。
在员工模型中
@Field(DbFields.SALARY)
private double salary;
在查询中,
query.addCriteria(Criteria.where(DbFields.SALARY).lt(salary));
在 DbFields 实用程序中 class
public static final String SALARY = "salary";