【已解决】Spring data jpa的@query的传入参数是对象怎么匹配参数

  • 作者: 凯哥Java(公众号:凯哥Java)
  • 经验分享
  • 时间:2023-06-15 18:12
  • 3000人已阅读
简介 我们知道,在使用JPA的时候,如果参数是一个一个的话,有两种方式匹配①:根据位置匹配。如下:@Query(value = "SELECT * FROM employee WHERE c_id=?1 and id=?2", nativeQuery = true)

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

我们知道,在使用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会自动将该对象转换为查询语句中的参数。


TopTop