程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了具有许多属性的Spring Data JPA中过滤结果的最佳解决方案是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决具有许多属性的Spring Data JPA中过滤结果的最佳解决方案是什么??

开发过程中遇到具有许多属性的Spring Data JPA中过滤结果的最佳解决方案是什么?的问题如何解决?下面主要结合日常开发的经验,给出你关于具有许多属性的Spring Data JPA中过滤结果的最佳解决方案是什么?的解决方法建议,希望对你解决具有许多属性的Spring Data JPA中过滤结果的最佳解决方案是什么?有所启发或帮助;

我不同意queryDSL会导致大量额外的代码。这是queryDSL的一些测试代码:

仓库定义:

public interface UserRepository extends PagingAndSorTingRepository<User, Long>, queryDslPreDicateExecutor<User> {

    public User findOne(PreDicate preDicatE);

    public List<User> findAll(PreDicate preDicatE);
}

基于各种属性及其组合的测试代码:

 @Test
    public voID testFindByEmailAddress() {
        User user = repository.findOne(QUser.user.emailAddress.eq("jack@hamilton.net"));
        Assert.assertNotNull(user);
        Assert.assertEquals("Jack", user.getForename());
        Assert.assertEquals("Hamilton", user.getSurname());
    }

    @Test
    public voID testFindBygender() {
        List<User> users = repository.findAll(QUser.user.gender.eq(gender.M));
        Assert.assertEquals(4, users.size());

        users = repository.findAll(QUser.user.gender.eq(gender.F));
        Assert.assertEquals(2, users.size());
    }

    @Test
    public voID testFindByCity() {

        List<User> users = repository.findAll(QUser.user.address.town.eq("Edinburgh"));
        Assert.assertEquals(2, users.size());

        users = repository.findAll(QUser.user.address.town.eq("Stirling"));
        Assert.assertEquals(1, users.size());
    }

    @Test
    public voID testFindBygenderAndCity() {
        List<User> users = repository.findAll(QUser.user.address.town.eq("Glasgow").and(QUser.user.gender.eq(gender.M)));
        Assert.assertEquals(2, users.size());

        users = repository.findAll(QUser.user.address.town.eq("Glasgow").and(QUser.user.gender.eq(gender.F)));
        Assert.assertEquals(1, users.size());
    }

解决方法

我这里有一个产品表的案例,需要通过用户输入(例如类别,颜色,大小,价格范围等)进行过滤。

我正在使用Spring Data JPA,并且对方法名称中的派生查询感到满意,当我被迫使用时,我只是对复杂的查询(例如联接和&Hellip;)使用@query选项。

但是对于我需要的Filter方法,我恐怕不得不写这样的东西

>     public interface ProductRepository extends JpaRepository<Product,Long>
> {
>        //..... other methods
>  
>     Page<Product>
> findByCategoriesContainingAndSALEpricebetween(List<Category> categories,> Float minprice,Float maxprice,Pagerequest pagerequest);
>  
>     Page<Product> findByCategoriesContaining(List<Category> categories,> Pagerequest pagerequest);
>  
>     Page<Product> findByCategoriesContainingAndSizeIn(List<Category>
> categories,Int[] sizes,Pagerequest pagerequest);
>  
>     Page<Product>
> findByCategoriesContainingAndSizeInAndSALEpricebetween(List<Category>
> categories,Float minprice,Pagerequest pagerequest);


> }

似乎添加一些其他字段将迫使我编写这么多不同的组合

所以我看过QueryDsl和Specification,但它们似乎有很多多余的代码,您能把我放在正确的道路上吗?

大佬总结

以上是大佬教程为你收集整理的具有许多属性的Spring Data JPA中过滤结果的最佳解决方案是什么?全部内容,希望文章能够帮你解决具有许多属性的Spring Data JPA中过滤结果的最佳解决方案是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。