spring-data-mongodb - 有没有办法避免在 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"
,因为如果字段名称发生更改,这将使代码在将来更难维护。我正在考虑从类属性中获取字段名称,但我不太确定如何。有没有办法做到这一点?我查看了文档,但没有发现任何相关内容,除非我错过了。
提前致谢。
解决方案
您可以创建一个实用程序类来存储所有数据库字段名称,@Field
在具有该类常量的字段上使用注释,并在查询中使用该常量以避免容易出错的硬编码字符串。
在员工模型中
@Field(DbFields.SALARY)
private double salary;
在查询中,
query.addCriteria(Criteria.where(DbFields.SALARY).lt(salary));
在 DbFields 实用程序类中
public static final String SALARY = "salary";
推荐阅读
- angular - 使用 publishReplay 和 refCount rxjs 运算符时,不会缓存 http 请求中的角度缓存
- ansible - 在 Ansible 中使用通配符查找远程文件
- regex - 如何仅包含介于两者之间的项目“
- android - Android从资源中获取字符串?
- python - 如何从 Microsoft Powerpoint 打开嵌入的“.py”文件?
- android - 在 NestedScrollView 内拖动滚动条
- laravel - url中的整数时如何重定向到父目录(不要删除URL的其余部分)
- c++ - 获取分段错误(在 C++ 中转储的代码
- postgresql - 基于表名的 Postgres 表分区
- python-3.x - 在 python 3.x 中使用 for 循环显示一个列表以询问用户输入