spring-data-jpa快速入门(二)——简单查询
2018-02-11 19:26
726 查看
一、方法名解析
1.引言回顾HelloWorld项目中的dao接口
public interface GirlRepository extends JpaRepository<Girl, Integer>{ // 新增自定义查询方法 List<Girl> findByAge(Integer age); }
可以看到,这个接口中我们只是声明了方法而没有写实现,但是却是能用的,这便得益于JPA的方法名解析了
2.简单条件查询
按照 Spring Data 的规范,查询方法以 find | read | get 开头
涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性以首字母大写
常用的关键字如下:
And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd); Or --- 等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr); Between --- 等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min); LessThan --- 等价于 SQL 中的 "<",比如 findBySalaryLessThan(int max); GreaterThan --- 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min); IsNull --- 等价于 SQL 中的 "is null",比如 findByUsernameIsNull(); IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull(); NotNull --- 与 IsNotNull 等价; Like --- 等价于 SQL 中的 "like",比如 findByUsernameLike(String user); StartingWith NotLike --- 等价于 SQL 中的 "not like",比如 findByUsernameNotLike(String user); OrderBy --- 等价于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user); Not --- 等价于 SQL 中的 "! =",比如 findByUsernameNot(String user); In --- 等价于 SQL 中的 "in",比如 findByUsernameIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数; NotIn --- 等价于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
完整关键字支持,查看官方文档:点击查看
IDEA对这方面支持非常友好!写方法解析时自动有智能提示!
示例:
List<Girl> findByNameStartingWithAndIdLessThan(String name, Integer id);
/** * 1. Repository 是一个空接口. 即是一个标记接口 * 2. 若我们定义的接口继承了 Repository, 则该接口会被 IOC 容器识别为一个 Repository Bean. * 纳入到 IOC 容器中. 进而可以在该接口中定义满足一定规范的方法. * * 3. 实际上, 也可以通过 @RepositoryDefinition 注解来替代继承 Repository 接口 */ /** * 在 Repository 子接口中声明方法 * 1. 不是随便声明的. 而需要符合一定的规范 * 2. 查询方法以 find | read | get 开头 * 3. 涉及条件查询时,条件的属性用条件关键字连接 * 4. 要注意的是:条件属性以首字母大写。 * 5. 支持属性的级联查询. 若当前类有符合条件的属性, 则优先使用, 而不使用级联属性. * 若需要使用级联属性, 则属性之间使用 _ 进行连接. */ //@RepositoryDefinition(domainClass=Person.class,idClass=Integer.class) public interface PersonRepsotory extends JpaRepository<Person, Integer>, JpaSpecificationExecutor<Person>, PersonDao{ //根据 lastName 来获取对应的 Person Person getByLastName(String lastName); //WHERE lastName LIKE ?% AND id < ? List<Person> getByLastNameStartingWithAndIdLessThan(String lastName, Integer id); //WHERE lastName LIKE %? AND id < ? List<Person> getByLastNameEndingWithAndIdLessThan(String lastName, Integer id); //WHERE email IN (?, ?, ?) OR birth < ? List<Person> getByEmailInAndBirthLessThan(List<String> emails, Date birth); //WHERE a.id > ? List<Person> getByAddress_IdGreaterThan(Integer id);
更多示例
其他的关键字也是类似,可以在控制台看到打印的SQL(配置了show sql)
当然,缺点非常明显,方法名特别特别长!这个后期会通过JPQL进行改进!
二、自定义查询
例如带子查询的就无法实现,这里就需要自定义SQL来进行查询了!参考:https://www.cnblogs.com/zj0208/p/6008627.html
相关文章推荐
- spring data jpa 创建方法名进行简单查询
- springdata jpa使用Example快速实现动态查询
- spring-data-jpa快速入门(一)——整合阿里Druid
- 三、JPA和SpringData集成快速入门
- Spring Data JPA 简单查询--方法定义规则(详解)
- SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法
- Spring data jpa 实现简单动态查询的通用Specification方法
- Spring Data JPA快速入门
- 快速入门spring-data-jpa,接口方法详解
- spring data jpa 创建方法名进行简单查询
- spring data jpa 创建方法名进行简单查询
- SpringDataJpa的简单入门使用
- Spring Data JPA 简单查询
- spring data jpa 快速入门上手
- Spring Data JPA 简单查询--方法定义规则
- SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法
- Spring Data JPA 快速入门
- SpringDataJpa的简单入门使用
- Spring Data JPA 简单查询--接口方法
- Spring Data JPA入门