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

发布时间:2023年12月23日

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

文章来源:https://blog.csdn.net/kaizi_1992/article/details/135166837
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。