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 的,例如上面我们最后一个测试方法控制台打印:

    这里写图片描述

  • 相关阅读:
    Webservice接口和Http接口
    java多线程
    时间显示成一串阿拉伯数字
    jsp静态与动态包含的区别和联系
    解决Win10默认占用80端口
    JAVA中文乱码之解决方案
    相对路径与绝对路径的差异
    JSP静态包含和动态包含的区别和联系
    数据库Oracle
    智能指针shared_ptr的用法
  • 原文地址:https://www.cnblogs.com/MaxElephant/p/8177288.html
Copyright © 2011-2022 走看看