我想说,使用QueryDSL是您想要做的一种方式。
例如,我有一个定义如下的存储库:
public interface UserRepository extends PagingAndSortingRepository<User, Long>, QueryDslPredicateExecutor<User> { public Page<User> findAll(Predicate predicate, Pageable p);}我可以使用任何参数组合调用此方法,如下所示:
public class UserRepositoryTest{ @Autowired private UserRepository userRepository; @Test public void testFindByGender() { List<User> users = userRepository.findAll(QUser.user.gender.eq(Gender.M)); Assert.assertEquals(4, users.size()); users = userRepository.findAll(QUser.user.gender.eq(Gender.F)); Assert.assertEquals(2, users.size()); } @Test public void testFindByCity() { List<User> users = userRepository.findAll(QUser.user.address.town.eq("Edinburgh")); Assert.assertEquals(2, users.size()); users = userRepository.findAll(QUser.user.address.town.eq("Stirling")); Assert.assertEquals(1, users.size()); } @Test public void testFindByGenderAndCity() { List<User> users = userRepository.findAll(QUser.user.address.town.eq("Glasgow").and(QUser.user.gender.eq(Gender.M))); Assert.assertEquals(2, users.size()); users = userRepository.findAll(QUser.user.address.town.eq("Glasgow").and(QUser.user.gender.eq(Gender.F))); Assert.assertEquals(1, users.size()); }}


