2

是否可以在 mongodb 存储库中为 @Query 方法使用命名参数,就像我们可以使用 jpa 存储库(http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE /reference/html/jpa.repositories.html第 2.3.5 节)?

例如,我想使用以下代码:

@Query("{'store' : :store, 'app' : :app }")
List<T> findByStoreAndApp(@Param("store") String store, @Param("app") String app);

代替:

@Query("{'store' : ?0, 'app' : ?1 }")
List<T> findByStoreAndApp(String store, String app);
4

2 回答 2

15

有可能,试试:

@Query("{'store' : :#{#store}, 'app' : :#{#app} }")
List<T> findByStoreAndApp(@Param("store") String store, @Param("app") String app);

在 Spring Data MongoDB 1.8 中引入了 @Query 中对 SpEL 表达式的支持。

https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.aggregation.projection.expressions

于 2018-05-16T11:30:41.713 回答
0

恐怕spring boot的源码中确实提供了这个功能。

您可以创建一个接口并扩展MongoRepository 它提供了一些简单的方法,您不需要实现它。就像使用 JpaRepository 一样。

@NoRepositoryBean
public interface MongoRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
    <S extends T> List<S> save(Iterable<S> var1);

    List<T> findAll();

    List<T> findAll(Sort var1);

    <S extends T> S insert(S var1);

    <S extends T> List<S> insert(Iterable<S> var1);
}

但是,如果你需要做一些特殊的查询。你可以@Autowired MongoTemplate并使用它自己的方法。而对于redis来说,springboot甚至没有像MongoRepository那样提供Repository。您只能使用 StringRedisTemplate 之类的模板进行查询操作。可能是后者,spring boot 会为 NoSql 添加类似 JpaRepository 的相同功能。但现在,它不提供此功能。

于 2016-07-07T02:11:15.927 回答