JPA的@NamedQuery註解

  1. 使用@NamedQuery註解在實體類中定義命名查詢

    @NamedQuery(name="findAllUser",query="SELECT  c FROM Customer c")
    

    其中name指定命名查詢的名稱,query指定命名查詢的語句

    其中name指定命名查詢的名稱,query屬性指定命令查詢的語句。

  2. 使用@NamedQueries定義多個命名查詢

    @NamedQueries({
      @NamedQuery(name="findAllCustomer",query="SELECT c FROM Customer"),
      @NamedQuery(name="findCoustomerWithId",query="SELECT c FROM Customer c WHERE c.id=?1")
      @NamedQuery(name="findCustomerWithName",query="SELECT c FROM Customer c WHERE c.name = :name"
    })
    

    如果用到?的形式獲取參數。那麼它是按照方法的參數順序來取值的;也可以使用:匹配參數

  3. 定義好命名查詢後,可以使用EntityManager的createNamedQuery方法傳入命名查詢的名稱創建查詢

createNamedQuery("findAllCustomer");
  1. 使用方法

    • 修改實體

      @Entity下增加@NamedQuery的定義(sql表達式裏面的表名要和當前的Entity一致)

      如果@Entity註解中使用了name屬性,例如:@Entity(name = "my_customer"), 則${entityName} 對應的就是 my_customer 表。

    • 修改CustomerRepository

      增加方法 Customer findCustomerWithName(String name);

    • 在CustomerController中調用

      /**
        * 查詢FirstName爲指定用戶暱稱
        */
      @RequestMapping("/findCustomerWithName")
      public void findCustomerWithName(){
      		Customer customer = repository.findCustomerWithName("John");
          		if(customer!=null){
              		System.out.println(customer.toString());
              }
       }
      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章