1

Spring MVC 3.2 を使用しており、永続化レイヤーに JPA を使用しています。私は次のことをしたいと思います:

このようなリクエストが届いたとき/some-item?param1=something&param2=123&order-by=some-fieldに、永続化レイヤーでクエリを自動的に構築できるようにして、10 億個のメソッドを作成する必要がないようにしたいと考えていますgetAllItemsWith(final String param1, final String param2...)

リクエスト パラメータを a にキャプチャし、Mapこれをリポジトリ レイヤに渡すことを考えました。ここには、マップに存在するかどうか、および necassaray 条件が追加されているかどうかを確認する事前定義されたパラメータのリストがあります。しかし、これを行うための他のより良い方法があるのだろうか?

4

3 に答える 3

1

この問題を解決するエレガントな方法を見つけました。「coalese」などの sql opeartor があります (いくつかの説明: http://www.1keydata.com/sql/sql-coalesce.html )。クエリに任意のパラメーターを渡すことができ、nullパラメーターが確実に無視されるようにします。

私のDAOインターフェースの例(Spring data-jpa、MySQL):

@Query("select b from Book b where " +
                "coalesce(b.name, '') like concat('%', :name, '%') " +
                "and coalesce(b.author, '') like concat('%', :author, '%') " +
                "and coalesce(b.category, '') like concat('%', :category, '%') " +
                "and coalesce(b.publisher, '') like concat('%', :publisher, '%') " +
                "and (b.available = :available1 or b.available = :available2)")
    public Page<Book> findByParams(
                @Param("name") String name
                , @Param("author") String author
                , @Param("category") String category
                , @Param("publisher") String publisher
                , @Param("available1") Boolean available1, @Param("available2") Boolean available2
                , Pageable pageReq);

お役に立てれば

于 2013-08-21T18:47:41.713 に答える
0

偶数基準APIで行うのは困難です。多くの検索条件を含む高度な検索の目的で主に使用される lucene Solr インデックス作成エンジンを見ることができます。

于 2013-08-21T17:37:36.603 に答える
0

Spring Data-JPA projectを見る価値があるかもしれません。パラメータのすべての組み合わせに対してインターフェイスを作成する必要がありますが、少なくともそれらは自動的に実装されます。

于 2013-08-21T18:00:31.170 に答える