自定义查询语句SpringData

虽然官方的API中给我们提供了很多关键字的查询,但是还是不够灵活,因为我们在项目中,会遇见奇葩的业务,我们需要用SpringData中的一个@Query注解。

使用@Query自定义查询

  • 这种查询可以声明在 Repository 方法中,摆脱像命名查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是 Spring data 的特有实现。
  • @Query("SELECT p FROM PERSON p where p.id = ?1")
    	Person testGetByPersonId(Integer id);
    

      

索引参数与命名参数

  • 索引参数如下所示,索引值从1开始,查询中 ”?X” 个数需要与方法定义的参数个数相一致,并且顺序也要一致 
  • 命名参数(推荐使用这种方式):可以定义好参数名,赋值时采用@Param("参数名"),而不用管顺序。

  • @Query("SELECT p FROM PERSON p where p.lastName = :lastName AND p.email=:email")
    	Person findByLastNameAndEmial(@Param("lastName") String lastName ,@Param("email") String email);
    	
    

      

  • 如果是 @Query 中有 LIKE 关键字,后面的参数需要前面或者后面加 %,这样在传递参数值的时候就可以不加 %: @Query("select o from UserModel o where o.name like ?1%") public List<UserModel> findByUuidOrAge(String name); @Query("select o from UserModel o where o.name like %?1") public List<UserModel> findByUuidOrAge(String name); @Query("select o from UserModel o where o.name like %?1%") public List<UserModel> findByUuidOrAge(String name);

用@Query来指定本地查询

 

  • 还可以使用@Query来指定本地查询,只要设置nativeQuery为true,比如: @Query(value="select * from tbl_user where name like %?1" ,nativeQuery=true) public List<UserModel> findByUuidOrAge(String name);

直接上代码:

package com.fxr.springdata;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;


public interface PersonRepsotory extends JpaRepository<Person,Integer>{

	//根据lastName来获取对应的Person
	Person getByLastName(String lastName);
	
	//我们来试着写一个查询laskName like 'sun' and id < ?的方法
	List<Person> getByLastNameStartingWithAndIdLessThan(String lastName,Integer id);
	
	
	//WHERE lastName LIKE %? AND id > ?
	List<Person> getByLastNameEndingWithAndIdGreaterThan(String lastName,Integer id);
	

	@Query("SELECT p FROM Person p where p.id = ?1")
	Person testGetByPersonId(Integer id);
	
	@Query("SELECT p FROM Person p where p.lastName = :lastName AND p.email=:email")
	Person findByLastNameAndEmial(@Param("lastName") String lastName ,@Param("email") String email);
	




}

  好了,自定义查询我们就结束了。是不是感觉SpringData很简单。

原文地址:https://www.cnblogs.com/airycode/p/6535635.html