顧名思義,方法命名規則查詢就是根據方法的名字,就能創建查詢。
只需要按照Spring Data JPA提供的方法命名規則定義方法的名稱,就可以完成查詢工作。
Spring Data JPA在程序執行的時候會根據方法名稱進行解析,並自動生成查詢語句進行查詢
按照Spring Data JPA 定義的規則,查詢方法以findBy開頭,涉及條件查詢時,條件的屬性用條件關鍵字連接,
要注意的是:條件屬性首字母需大寫。框架在進行方法名解析時,會先把方法名多余的前綴截取掉,然后對剩下部分進行解析。
//方法命名方式查詢(根據客戶名稱查詢客戶) public Customer findByCustName(String custName);
具體的關鍵字,使用方法和生產成SQL如下表所示:
/** * 客戶持久層接口 * JpaRepository<實體類類型,主鍵類型>:用來完成基本CRUD操作 * JpaSpecificationExecutor<實體類類型>:用於復雜查詢(分頁等查詢操作) */ public interface CustomerDao extends JpaRepository<Customer, Long>, JpaSpecificationExecutor<Customer> { /** * JPA方法命名規則查詢 * 根據客戶名稱查詢 */ Customer findByCustName(String custName); /** * 根據客戶名稱模糊查詢 * @param custName * @return */ List<Customer> findByCustNameLike(String custName); /** * 使用客戶名稱模糊匹配和客戶所屬行業精准匹配的查詢 */ Customer findByCustNameLikeAndCustIndustry(String custName,String custIndustry); }
測試:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:applicationContext.xml") public class JpqlTest { /** * JPA方法命名規則查詢 */ @Test public void testFindByCustName() { Customer c = customerDao.findByCustName("小明"); System.out.println(c); } @Test public void testFindByCustNameLike() { List<Customer> list = customerDao.findByCustNameLike("小%"); for (Customer customer : list) { System.out.println(customer); } } @Test public void testFindByCustNameLikeAndCustIndustry() { Customer c = customerDao.findByCustNameLikeAndCustIndustry("小%", "教育"); System.out.println(c); } }