1、我们之前将分页查询的时候有说道可以根据年龄进行查询,该查询便使用了根据方法名称进行查询,UserRepository使用findBy语句,后面接的是实体类的Age属性,因此该方法的第一个参数便可以传Integer类型的Age值了,如下图所示。然后我们在Controller类中编写根据年龄进行查询的方法,postman测试的结果如下图所示。
2、我们再看看普通的查询,如果要根据姓名和年龄进行查询,方法名写为findByNameAndAge(name, age),服务启动并调用方法后,我们可以看到打印的sql日志如下图所示,可以看到确实根据姓名和年龄过滤了。@GetMapping("/find/1")public List<User> findByNameAndAge(String name, Integer age) { return userRepository.findByNameAndAge(name, age);}
3、根据姓名和年龄查询并且去重的方法写为findDistinctUserByNameAndAge(name, age)或者findUserDistinctByNameAndAge(name, age),Distinct这个限制条件既可以写在User前也可以写在User后,如下图所示。/** * distinct去重 * @param name * @param age * @return */@GetMapping("/find/2")public List<User> findDistinctUserByNameAndAge(String name, Integer age) { return userRepository.findDistinctUserByNameAndAge(name, age);}@GetMapping("/find/3")public List<User> findUserDistinctByNameAndAge(String name, Integer age) { return userRepository.findUserDistinctByNameAndAge(name, age);}
4、接下来是根据姓名进行查询,方法为findByName(name),还有根据姓名进行查询并且忽略大小写的findByNameIgnoreCase(name),由于mysql数据库不区分大小写,因此该方法不起作用,代码及调用结果如下图所示。@GetMapping("/find/4")public List<User> findUserByName(String name) { return userRepository.findByName(name);}@GetMapping("/find/5")public List<User> findUserByNameIgnoreCase(String name) { return userRepository.findByNameIgnoreCase(name);}
5、接下来介绍的为根据某一个字段进行查询并且进行排序的方法,举个例子,根据姓名进行升序排列的方法为findByNameOrderByAgeAsc(name)和根据姓名进行降序排列的方法为findByNameOrderByAgeDesc(name),代码及调用结果如下图所示。@GetMapping("/find/6")public List<User> findUserByAgeAsc(String name) { return userRepository.findByNameOrderByAgeAsc(name);}@GetMapping("/find/7")public List<User> findUserByAgeDesc(String name) { return userRepository.findByNameOrderByAgeDesc(name);}
6、最后补充一下,以上Controller中调用的方法都需要先在UserRepository中定义好,如下图所示。Page<User> findByAge(Integer age, Pageable Pageable );List<User> findByNameAndAge(String name, Integer age);List<User> findDistinctUserByNameAndAge(String name, Integer age);List<User> findUserDistinctByNameAndAge(String name, Integer age);List<User> findByName(String name);List<User> findByNameIgnoreCase(String name);List<User> findByNameOrderByAgeAsc(String name);List<User> findByNameOrderByAgeDesc(String name);