顾名思义,方法命名规则查询就是根据方法的名字,就能创建查询。
只需要按照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); } }
来源:https://www.cnblogs.com/roadlandscape/p/12375059.html