zoukankan      html  css  js  c++  java
  • 自定义查询语句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很简单。

  • 相关阅读:
    springboot2.1.3+jacoco检测代码覆盖率
    springboot2.1.3使用mvn site遇到的坑及解决方案
    docker安装mysql5.6(win10家庭版)
    Windows10家庭版安装docker攻略
    python 实例方法,类方法,静态方法的调用
    python超继承
    python 测试生成Htmltestrunner报告几个参数
    Python3 中类的静态方法、普通方法、类方法
    python 操作文件
    1
  • 原文地址:https://www.cnblogs.com/airycode/p/6535635.html
Copyright © 2011-2022 走看看