zoukankan      html  css  js  c++  java
  • @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 的,例如上面我们最后一个测试方法控制台打印:

    这里写图片描述

  • 相关阅读:
    【免费赠书】前端程序员修炼之路:积土而为山,积水而为海
    开源网站流量统计系统Piwik源码分析——后台处理(二)
    开源网站流量统计系统Piwik源码分析——参数统计(一)
    数学思维修炼
    《代码大全》中的变量
    linux dmesg命令参数及用法详解(linux显示开机信息命令)
    dd命令使用详解
    Linux就这个范儿 第10章 生死与共的兄弟
    Linux就这个范儿 第9章 特种文件系统
    Bash中的shopt选项
  • 原文地址:https://www.cnblogs.com/MaxElephant/p/8177288.html
Copyright © 2011-2022 走看看