Spring Data JPA根据方法名自定义查询方法

 时间:2024-10-23 14:04:08

1、我们之前将分页查询的时候有说道可以根据年龄进行查询,该查询便使用了根据方法名称进行查询,UserRepository使用findBy语句,后面接的是实体类的Age属性,因此该方法的第一个参数便可以传Integer类型的Age值了,如下图所示。然后我们在Controller类中编写根据年龄进行查询的方法,postman测试的结果如下图所示。

Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法

2、我们再看看普通的查询,如果要根据姓名和年龄进行查询,方法名写为findByNameAndAge(name, age),服务启动并调用方法后,我们可以看到打印的sql日志如下图所示,可以看到确实根据姓名和年龄过滤了。@GetMapping("/find/1")public List<User> findByNameAndAge(String name, Integer age) { return userRepository.findByNameAndAge(name, age);}

Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法

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);}

Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法

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);}

Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法

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);}

Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法
Spring Data JPA根据方法名自定义查询方法

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);

Spring Data JPA根据方法名自定义查询方法
  • 迢迢牵牛星主旨
  • 2019年寒假学生火车票如何集中订票
  • 怎么制作突出感字体呢
  • #萌新听我说#
  • 手机QQ怎么购买电影票
  • 热门搜索
    我的家手抄报 古诗配画手抄报 依法治校手抄报 平安手抄报 中华传统美德手抄报 手抄报的图片 我心中的红十字手抄报 防火手抄报图片 森林防火手抄报图片 三年级手抄报怎么写