【已解决】Spring data jpa的@query的传入参数是对象怎么匹配参数
- 经验分享
- 时间:2023-06-15 18:12
- 3000人已阅读
简介
我们知道,在使用JPA的时候,如果参数是一个一个的话,有两种方式匹配①:根据位置匹配。如下:@Query(value = "SELECT * FROM employee WHERE c_id=?1 and id=?2", nativeQuery = true)
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
我们知道,在使用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会自动将该对象转换为查询语句中的参数。
上一篇: frp常见错误