其他同學提供的方式大部分都是Map接收調用mysql存儲過程返回OUT結果集,要麼遊標,要麼單個OUT,然後再次加工成想要的對象。涉及到直接用註解實現自動轉換OUT參數結果集爲對象時,都是忽略帶過。
下面爲各位踩坑的同學上代碼描述如何處理調用mysql多in多out的存儲過程:
@Options(statementType = StatementType.CALLABLE)
@Select("CALL jira_gf.Proc_YFZX_GetProjectIssuesByProjectKeyAndVersionAndIssueType_dev(" +
"#{projectKey,mode=IN,jdbcType=VARCHAR}," +
"#{fixOrAffectversion,mode=IN,jdbcType=VARCHAR}," +
"#{issueType,mode=IN,jdbcType=VARCHAR}," +
"#{project_id,mode=OUT,jdbcType= INTEGER}," +
"#{project_name,mode=OUT, jdbcType=VARCHAR}," +
"#{project_key,mode=OUT, jdbcType=VARCHAR}," +
"#{version_id,mode=OUT,jdbcType=INTEGER}," +
"#{version_name,mode=OUT,jdbcType=VARCHAR}," +
"#{version_startdate,mode=OUT,jdbcType=VARCHAR}," +
"#{version_releasedate,mode=OUT,jdbcType=VARCHAR}," +
"#{version_archived,mode=OUT,jdbcType=VARCHAR}," +
"#{version_released,mode=OUT,jdbcType=VARCHAR}," +
"#{sprint_id,mode=OUT,jdbcType=INTEGER}," +
"#{sprint_name,mode=OUT,jdbcType=VARCHAR}," +
"#{sprint_startdate,mode=OUT,jdbcType=BIGINT}," +
"#{sprint_startdate_datetime,mode=OUT,jdbcType=VARCHAR}," +
"#{sprint_enddate,mode=OUT,jdbcType=BIGINT}," +
"#{sprint_enddate_datetime,mode=OUT,jdbcType=VARCHAR}," +
"#{sprint_completedat,mode=OUT,jdbcType=BIGINT}," +
"#{sprint_completedate_datetime,mode=OUT,jdbcType=VARCHAR}," +
"#{sprint_started,mode=OUT,jdbcType=INTEGER}," +
"#{sprint_closed,mode=OUT,jdbcType=INTEGER}," +
"#{issue_id,mode=OUT,jdbcType=INTEGER}," +
"#{issue_status,mode=OUT,jdbcType=INTEGER}," +
"#{status_name,mode=OUT,jdbcType=VARCHAR}," +
"#{issuetotal,mode=OUT,jdbcType=INTEGER})")
@Results(value = {
@Result(property = "projectId", column = "project_id"),
@Result(property = "projectName", column = "project_name"),
@Result(property = "projectKey", column = "project_key"),
@Result(property = "versionId", column = "version_id"),
@Result(property = "versionName", column = "version_name"),
@Result(property = "versionStartdate", column = "version_startdate"),
@Result(property = "versionReleasedate", column = "version_releasedate"),
@Result(property = "versionArchived", column = "version_archived"),
@Result(property = "versionReleased", column = "version_released"),
@Result(property = "sprintId", column = "sprint_id"),
@Result(property = "sprintName", column = "sprint_name"),
@Result(property = "sprintStartdate", column = "sprint_startdate"),
@Result(property = "sprintStartdateDatetime", column = "sprint_startdate_datetime"),
@Result(property = "sprintEnddate", column = "sprint_enddate"),
@Result(property = "sprintEnddateDatetime", column = "sprint_enddate_datetime"),
@Result(property = "sprintCompletedate", column = "sprint_completedate"),
@Result(property = "sprintCompletedateDatetime", column = "sprint_completedate_datetime"),
@Result(property = "sprintStarted", column = "sprint_started"),
@Result(property = "sprintClosed", column = "sprint_closed"),
@Result(property = "issueId", column = "issue_id"),
@Result(property = "issueStatus", column = "issue_status"),
@Result(property = "statusName", column = "status_name"),
@Result(property = "issueTotal", column = "issuetotal")
})
List<JiraProjectInfoWithSprintEntity> getTargetProjectWithIssuesByPorjectKeyAndVersionAndIssueType(@Param("projectKey") String projectKey, @Param("fixOrAffectversion") String fixOrAffectversion, @Param("issueType") String issueType);