我们知道,在使用JPA的时候,如果参数是一个一个的话,有两种方式匹配
①:根据位置匹配。如下:
@Query(value?=?"SELECT?*?FROM?employee?WHERE?c_id=?1?and?id=?2",?nativeQuery?=?true) EmployeeEntity?getUnitCertificateById(String?cId,String?id);
其中?1和?2正好对应入参的cId和id
②:使用@Param进行显示指定。如下:
@Query(value?=?"SELECT?*?FROM?employee?WHERE?id=?:id",?nativeQuery?=?true) List<EmployeeEntity>?getUnitCertificate(String?id);
或者在 String id前面加上@Param("id")
③:如果入参是一个对象的话,那么,参数又是如何匹配的呢?
在使用@Query注解时,可以使用spel表达式来访问对象的属性。例如:
@Query("SELECT?e?FROM?Employee?e?WHERE?e.firstName?=?:#{#employee.firstName}?AND?e.lastName?=?:#{#employee.lastName}") List<Employee>?findByFirstNameAndLastName(@Param("employee")?Employee?employee);
这里,我们使用#{}来访问employee对象的firstName和lastName属性。注意,#{}的内容需要用双引号括起来。
在调用该方法时,可以直接传入一个Employee对象作为参数,例如:
Employee?employee?=?new?Employee(); employee.setFirstName("John"); employee.setLastName("Doe"); List<Employee>?results?=?repository.findByFirstNameAndLastName(employee);
Spring Data JPA会自动将该对象转换为查询语句中的参数。