Retrieve data from MongoDB using spring data findAll(Example<S> example)
我有一个Java应用程序,该应用程序使用Spring data从mongo DB中检索数据。我有一种情况,我想从isDeleted标志设置为false的mongo集合中检索所有对象。
我尝试使用org.springframework.data.domain.ExampleMatcher,如https://github.com/spring-projects/spring-data-examples/tree/master/mongodb/query-by-example中所述,但它不起作用(返回0条记录)。以下是我尝试的代码片段。
注意:我尝试通过在下面的代码段中添加和删除withIgnoreNullValues()来进行尝试,但这没有帮助。
1 2 3 4 5 6 7 8 | public List<Adns> getAll(){ Adns matcherObject = new Adns(); matcherObject.setDeleted(false); ExampleMatcher matcher = ExampleMatcher.matching().withIgnoreNullValues(). withMatcher("isDeleted", exact()); Example<Adns> example = Example.of(matcherObject,matcher); return adnsRepository.findAll(example); } |
我能够成功获取没有该布尔过滤器的所有对象。以下是工作代码。
1 2 3 | public List<Adns> getAll(){ return adnsRepository.findAll(); } |
下面是UML类:
您需要在存储库接口上创建方法声明
在运行时,sp??ring数据将找到此接口并自动为其创建一个实现。实际上,这是spring-data的关键特征之一。您可以在文档中阅读有关查询方法的更多信息。 Spring文档非常易于阅读,并包含许多示例。
假设您的
1 2 3 4 | public interface AdnsRepository extends CrudRepository<Adns, Long> { // this method declaration is automatically implemented by the spring-data library at runtime. List<Adns> findByDeletedIsFalse(); } |
有关查询方法生成的更多信息:
- 关键字:isFalse,isLike,isNotEmpty等
- 可以从Spring数据存储库查询方法返回的有效返回类型。
如果您的Probe对象(在本例中为Adns)具有诸如boolean之类的原始类型,则在使用示例匹配器时请务必小心。
无法实例化未设置此类属性的对象。这是因为基元始终采用默认值(对于布尔值,则为false),并且不能将其分配为null。
因此,如果您打算通过任何其他字段进行搜索,则使用该探针进行的示例搜索可能最终会产生不希望的副作用:示例中将始终包含原始字段(其默认值为'false \\')。
现在,关于您的问题,我建议您打印出探针对象的json表示形式(使用jackson \\的modelmapper来执行此操作)以检测具有默认值的任何字段(例如,空字符串插入了null值) )。除此之外,您的字段在模型中被称为"删除",因此正确的匹配项应为:
1 | withMatcher("deleted", exact()); |
无论如何,总是最好使用存储库中的findBy ....方法并依靠spring-data-mongodb自动实现
希望能有所帮助。