Spring Data JDBC能否使用对象属性作为查询参数?
Spring Data JDBC 直接引用实体对象属性实现Upsert
可以直接在@Query注解的SQL语句中通过参数名.属性名的格式引用实体对象的属性,无需额外编写包装方法拆解对象。针对你的场景,修改后的代码如下:
@Modifying @Query(""" INSERT INTO loan (id, ucdp_document_file_id, lender_loan_no, fre_seller_no, fre_delivery_seller_no, fre_lp_key) values (:r.id, :r.ucdpDocumentFileId, :r.lenderLoanNo, :r.freSellerNo, :r.freDeliverySellerNo, :r.freLpKey) ON CONFLICT (ucdp_document_file_id) DO UPDATE SET lender_loan_no = EXCLUDED.lender_loan_no, fre_seller_no = EXCLUDED.fre_seller_no, fre_delivery_seller_no = EXCLUDED.fre_delivery_seller_no, fre_lp_key = EXCLUDED.fre_lp_key""") void upsert(LoanRecord r);
说明:
- 方法参数直接接收
LoanRecord对象,参数名为r(可自定义,只要和SQL中的引用一致即可) - SQL语句中通过
:r.id、:r.ucdpDocumentFileId这种格式,直接引用对象的属性值 - 确保
LoanRecord类中对应属性有公开的getter方法,Spring Data JDBC会通过getter获取属性值填充到SQL中
这样就能移除原来的default包装方法,实现和MyBatis类似的对象属性直接引用效果,适配你使用的Spring Data JDBC 2.4.2版本。
内容的提问来源于stack exchange,提问作者Bogdan Calmac
相关产品推荐
相关产品推荐

