【问题标题】:@Query named parameters for MongoDb Spring repository用于 MongoDb Spring 存储库的 @Query 命名参数
【发布时间】:2016-07-06 15:05:00
【问题描述】:

是否可以在 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);

【问题讨论】:

    标签: spring mongodb spring-data-mongodb spring-repositories


    【解决方案1】:

    有可能,试试:

    @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

    【讨论】:

      【解决方案2】:

      恐怕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 的相同功能。但现在,它不提供此功能。

      【讨论】:

        猜你喜欢
        • 2018-08-25
        • 1970-01-01
        • 1970-01-01
        • 2019-06-14
        • 2022-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-17
        相关资源
        最近更新 更多