【发布时间】:2021-10-29 10:28:20
【问题描述】:
Repository 接口 Spring Data 的 arguments 方法中如何将多个参数作为 DTO 或实体类传递
我有一个接收多个 IN 类型参数的程序,但我在 SonarQube 中的代码存在问题 Methods should not have too many parameters
我的实体:
@Entity
@NamedStoredProcedureQuery(name = "MySPName", procedureName = "MySPName", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter1", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter2", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter3", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter4", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter5", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter6", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter7", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter8", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter9", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter10", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter11", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter12", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "parameter13", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "resultCode", type = Integer.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "resultMessage", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "name", type = String.class)
})
public class MyEntitySP implements Serializable {
@Id
@Column(name = "resultCode")
private Integer resultCode;
@Column(name = "resultMessage")
private String resultMessage;
@Column(name = "name")
private String name;
}
我的仓库:
public class MyRepository extends JpaRepository<MyEntitySP, Integer> {
@Procedure("MySPName")
MyEntitySP callSP(@Param("parameter1") String parameter1, @Param("parameter2") String parameter2, @Param("parameter3") String parameter3, @Param("parameter4") String parameter4, @Param("parameter5") String parameter5, @Param("parameter6") String parameter6, @Param("parameter7") String parameter7, @Param("parameter8") String parameter8, @Param("parameter9") String parameter9, @Param("parameter10") String parameter10, @Param("parameter11") String parameter11, @Param("parameter12") String parameter12, @Param("parameter13") String parameter13)
}
我喜欢任何可能的类参数:
public class MyParameters {
@Param("parameter1")
private String parameter1;
@Param("parameter2")
private String parameter2;
@Param("parameter3")
private String parameter3;
@Param("parameter4")
private String parameter4;
@Param("parameter5")
private String parameter5;
@Param("parameter6")
private String parameter6;
@Param("parameter7")
private String parameter7;
@Param("parameter8")
private String parameter8;
@Param("parameter9")
private String parameter9;
@Param("parameter10")
private String parameter10;
@Param("parameter11")
private String parameter11;
@Param("parameter12")
private String parameter12;
@Param("parameter13)
private String parameter13;
}
也许还有存储库:
public class MyRepository extends JpaRepository<MyEntitySP, Integer> {
@Procedure("MySPName")
MyEntitySP callSP(MyParameters parameters)
}
有可能吗? - 请帮助我*
【问题讨论】:
-
你应该试试jooq.org
-
谢谢,我觉得很好,但我想在 Spring Data and Repository 中使用
标签: java spring spring-boot spring-data java-stored-procedures