[spring-jpa]定义查询方法

本文介绍了Spring Data JPA的查询方式,包括基于属性名的查询、使用NamedQuery、@Query注解进行复杂查询,以及Specification接口进行准则查询。同时,讲解了如何实现排序和分页操作。
摘要由CSDN通过智能技术生成

背景:

假设我们有一个数据表叫Person,有ID(Number)、NAME(Varchar2)、AGE(Number)、ADDRESS(Varchar2)几个字段;对应的实体类叫Person,分别有id(long),name(String),age(Integer),address(String)。

1. 根据属性名查询

Spring Data jpa 支持通过定义在Repository接口中的方法名来定义查询,而方法名时根据实体类的属性名来确定的。

  • 常规查询。根据属性名来定义查询的方法,示例如下:
	public interface PersonRepository extends JpaRepository<Person,Long> {
   
		/**
		* 通过名字相等查询,参数为name
		* 相当于JPQL:select p from Person p where p.name = ?1	
		*/
		List<Person> findByName(String name);

		/**
		*
		* 通过名字like查询,参数为name
		* 相当于JPQL:select p from Person p where p.name like ?1
		*/
		List<Person> findByNameLike(String name);

		/**
		*
		* 通过名字和地址查询,参数为name 和 address
		* 相当于JPQL:select p from Person p where p.name=?1 and p.address=?2
		*
		*/
		List<Person> findByNameAndAddress(String name,String address);
	}

从代码中看出,这里使用了findBy、Like、And这样的关键字。其中findBy可以用find、read、readBy、query、queryBy、get、getBy来代替。

而Like和and这类查询关键字,说明如下表:

关键字 示例 同功能JPQL
And findByLastnameAndFirstname where x.lastname=?1 and x.firstname=?2
Or findByLastnameOrFirstname where x.lastname=?1 or x.firstname=?2
Is,Equals findByFirstname,findByFirstnameIs,findByFirstnameEquals where x.firstname=?1
Between findByStartDateBetween where x.startDate between ?1 and ?2
LessThan findByAgeLessThan where x.age<?1
LessThanEqual findByAgeLessThanEqual where x.age <=?1
GreaterThan findByAgeGreaterThan where x.age > ?1
GreaterThanEqual findByAgeGreaterEqual where x.age >=?1
After findByStartDateAfter where x.startDate < ?1
Before findByStartDateBefore where x.startDate <?1
IsNull findByAgeIsNull where x.age is null
IsNotNull,NotNull findByAges(Is)NotNull where x.age not null
Like findByFirstnameLike where x.firstname like ?!
NotLike findByFirstnameNotLike where x.firstname not like
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值