-
使用@NamedQuery註解在實體類中定義命名查詢
@NamedQuery(name="findAllUser",query="SELECT c FROM Customer c")
其中
name
指定命名查詢的名稱,query
指定命名查詢的語句其中
name
指定命名查詢的名稱,query
屬性指定命令查詢的語句。 -
使用@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" })
如果用到
?
的形式獲取參數。那麼它是按照方法的參數順序來取值的;也可以使用:
匹配參數 -
定義好命名查詢後,可以使用EntityManager的createNamedQuery方法傳入命名查詢的名稱創建查詢
createNamedQuery("findAllCustomer");
-
使用方法
-
修改實體
在
@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()); } }
-