我这里有一个产品表的案例,需要通过用户输入(例如类别,颜色,大小,价格范围等)进行过滤。
我正在使用Spring Data JPA,并且对方法名称中的派生查询感到满意,当我被迫使用时,我只是对复杂的查询(例如联接和…)使用@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, Float maxprice, PageRequest pagerequest);
> }
所以我看过QueryDsl和Specification,但它们似乎有很多多余的代码,您能把我放在正确的道路上吗?
我不同意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());
}
问题内容: 至少有六打Django应用程序为Django提供OpenID身份验证: django-openid django-openid-auth 另一个django-openid-auth,似乎已经死了 django-authopenid django-socialauth(还提供对Twitter和Facebook帐户的身份验证) django-socialregistration(也具有Fa
问题内容: 请注意 :这是一个古老的问题,带有古老的答案。现在大多数链接的应用程序都不再需要维护。这些天来,大多数人似乎都使用django- allauth 或python-social- auth 。为了后代的缘故,下面将完整保留原始问题。 至少有六打Django应用程序为Django提供OpenID身份验证: django-openid django-openid-auth 另一个django
问题内容: 我已经开发了一些类似于DAO的自定义类,以满足我的项目的一些非常特殊的要求,这是一个不在任何框架内运行的服务器端进程。 该解决方案非常有效,除了每次发出新请求时,我都会通过MySQLdb.connect打开一个新连接。 将其切换为在python中使用连接池的最佳“插入”解决方案是什么?我在想像Java的通用DBCP解决方案。 该过程运行很长时间,并且有许多线程需要发出请求,但不是所有线
问题内容: 我想过滤java.util.Collection基于谓词的。 问题答案: Java 8(2014)在一行代码中使用流和lambda解决了此问题: 这是一个教程。 使用修改收集到位。(注意:在这种情况下,谓词将删除满足该谓词的对象): 允许过滤集合而无需编写循环或内部类: 你能想象一些更具可读性的东西吗?
我使用Windows窗体已经有一段时间了,由于窗体的某些限制,我想用更好的方法来制作GUI。我找到了WPF,它看起来很有前途,但我想问你们,有没有更好的方法用C#为Windows制作好的GUI?提前道谢!