springBoot+JPA调用存储过程
程序员文章站
2022-04-21 12:05:41
...
本文调用存储过程可能会因为情况不同,并不适用所有人。这里就本人遇到的情况,亲测有效,遇到的小伙伴们可以试试。
1、先在实体类中建立与存储过程的联系。
@Entity
/**
* @Procedure存储过程查询方法
* 存储过程使用了注解@NamedStoredProcedureQuery 并绑定到一个JPA表。
* procedureName是数据库中存储过程的名字
* name是JPA中存储过程的名字
* 使用注解@StoredProcedureParameter来定义存储过程使用的IN/OU参数
*/
@NamedStoredProcedureQuery(name = "ucbe",procedureName = "P_UNIFIED_CREDIT_BATCH_ETL",parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN,name = "fileName",type=String.class),
@StoredProcedureParameter(mode = ParameterMode.IN,name="linkId",type = String.class)
})
@Table(name="UNIFIED_CREDIT_BATCH_TRA")
public class UnifiedCreditBatchTraPo {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="UC_SEQ_BATCH_TRA")//调用oracle序列自增
@SequenceGenerator(name="UC_SEQ_BATCH_TRA",sequenceName="UC_SEQ_BATCH_TRA",allocationSize="1")
@Column(name="ID")
private Integer id;
@Column(name="CUSTOMERID")
private String customerId;
@Column(name="LINKID")
private String linkId;
@Column(name="FILENAME")
private String fileName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId= customerId;
}
public String getLinkId() {
return linkId;
}
public void setLinkId(String linkId) {
this.linkId= linkId;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName= fileName;
}
}
2、dao层调用存储过程
public interface UnifiedCreditBatchTraDao extends JpaRepository<UnifiedCreditBatchTraPo,String>{
/**
* 调用存储过程
* pluslinout 存储过程名字
* @param arg
* @return
*/
@Procedure(procedureName = "P_UNIFIED_CREDIT_BATCH_ETL")
void unifiedCreditBatchEtl(String fileName,String linkId);
}
3、控制层调用dao层方法
@RestController
public class UnifiedCreditController {
@Autowired
private UnifiedCreditBatchTraDao unifiedCreditBatchTraDao;
/**
* @Procedure
* 调用存储过程
*/
@RequestMapping("doProcedure")
public void doProcedure(String fileName,String linkId){
try{
unifiedCreditBatchTraDao.unifiedCreditBatchEtl(fileName,linkId);
}catch{
logger.error("存储过程调用失败",e)
}
}
}
注意:本例中存储过程只有传入参数,没有返回参数。如果存储过程有返回值,可在实体类中通过@StoredProcedureParameter(mode = ParameterMode.OUT,name="res",type = Integer.class)来定义。在dao层根据返回值来定义返回类型。
推荐阅读