• @Query 注解实现查询(二十四)


    为了节约时间使得各位看官看起来更加简单舒适,这一节把测试方法和测试代码放在一起。

    测试方法:

    // ------------------------------------ 使用 @Query 注解
    // 没有参数的查询
    @Query("select p from Person p where p.id = (select max(p2.id) from Person p2)")
    Person getMaxIdPerson();
    
    /**
     * 参数名称和参数顺序耦合
     * @param lastName
     * @param email
     * @return
     */
    @Query("select p from Person p where lastName=?1 and email=?2")
    Person readPersonByLastNameAndEmail(String lastName,String email);
    
    @Query("select p from Person p where email=:email and  lastName=:name")
    Person readPersonByLastNameAndEmailThroughName(@Param("name") String lastName,@Param("email") String email);
    
    // 使用 like
    @Query("select p from Person p where lastName like ?1")
    Person readPersonByLike(String likeName);
    
    // @Query 注解支持使用百分号
    @Query("select p from Person p where lastName like %?1%")
    Person readPersonByLike2(String likeName);
    
    // @Query 注解支持使用百分号
    @Query("select p from Person p where lastName like %:lastName%")
    Person readPersonByLike3(@Param("lastName")String name);
    
    // 使用原生的 SQL
    @Query(value="select * from jpa_person p1 where p1.last_name like %:lastName%",nativeQuery=true)
    Person getPersonUsingOriginSQL(@Param("lastName")String lastName);

    测试代码:

    // 以下测试 @Query 注解
    @Test
    public void testQueryAnnotationWithoutParam(){
        Person person = personRepository.getMaxIdPerson();
        System.out.println(person);
    }
    
    @Test
    public void testQueryAnnotationWithParam(){
        Person person = personRepository.readPersonByLastNameAndEmail("liwei","liwei@sina.com");
        System.out.println(person);
    }
    
    @Test
    public void testQueryAnnotationWithParamThroughName(){
        Person person = personRepository.readPersonByLastNameAndEmailThroughName("zhouguang","zhouguang@163.com");
        System.out.println(person);
    }
    
    @Test
    public void testQueryAnnotationWithParamThroughLike(){
        Person person = personRepository.readPersonByLike("%zhou%");
        System.out.println(person);
    }
    
    @Test
    public void testQueryAnnotationWithParamThroughLike2(){
        Person person = personRepository.readPersonByLike2("hu");
        System.out.println(person);
    }
    
    @Test
    public void testQueryAnnotationWithParamThroughLike3(){
        Person person = personRepository.readPersonByLike3("wei");
        System.out.println(person);
    }
    
    @Test
    public void testQueryAnnotationWithParamThroughLike4(){
        Person person = personRepository.getPersonUsingOriginSQL("wei");
        System.out.println(person);
    }

    注意到:如果我们使用原生的 SQL,控制台打印的语句也会是原生 SQL 的,例如上面我们最后一个测试方法控制台打印:

    这里写图片描述

  • 相关阅读:
    启动与指定的文件或协议相关联的默认应用程序
    Windows phone msdn 索引
    34、ShareTarget
    36、UI contrast and settings
    Windows 8下默认管理员登录
    精益创业 Lean Startup
    38、animation
    access2003 基础 1008
    JQuery DOM
    用Javascript实现面向对象编程(封装,抽象,继承,多态)
  • 原文地址:https://www.cnblogs.com/MaxElephant/p/8177288.html
Copyright © 2020-2023  润新知