今天在查询sql的时候遇到这个问题 Parameter index out of range (2 > number of parameters, which is 1).
出现问题的截图:
下面是我写sql的地方:
<select id="getProjectRiskAssessesSubmitList"
resultType="com.crecg.smart.precaution.risk.model.domain.RiskAssess">
-- SELECT
-- pra.*
-- FROM `pre_risk_assess` pra
-- JOIN `pre_todo_sub` pts ON pra.todo_sub_id = pts.id
-- JOIN `pre_todo` pt ON pt.todo_sub_id = pts.id
-- JOIN `pre_danger_plan` pdp ON pra.plan_id = pdp.id
-- JOIN `pre_project` pp ON FIND_IN_SET(pp.id, pdp.project_ids) > 0
-- WHERE pt.`status` = 1
-- AND pra.status = 3
-- AND pp.id = #{projectId}
-- AND pt.start_date = (
-- SELECT MAX(t2.start_date) AS max_start
-- FROM `pre_todo` t2
-- WHERE t2.plan_id = pdp.id and t2.`status` = 1
-- )
-- ORDER BY pra.id
SELECT pra.id,pra.risk_grade
FROM pre_risk_assess pra
JOIN pre_todo_sub pts ON pra.todo_sub_id = pts.id
JOIN pre_project pp ON pts.project_id = pp.id
WHERE pp.id = #{projectId}
AND pts.status = 1
AND pra.status = 3
AND pts.operate_date = (
SELECT MAX(pts2.operate_date) AS max_start
FROM pre_todo_sub pts2
WHERE pts2.plan_id = pra.plan_id
and pts2.status = 1
)
ORDER BY pra.id
</select>
出现错误的原因,上面我有注释一段原有的sql,sql里面包含一个#{projectId},没有注释的代码也有一个#{projectId}
MyBatis 尝试设置第 2 个参数,但是我入参只有一个,找不到对应的占位符,因为我有两个占位符,一个是正常的sql,一个是注释的sql
解决办法:
删除xml文件中注释的信息,即可解决这个问题,如下:
<select id="getProjectRiskAssessesSubmitList"
resultType="com.crecg.smart.precaution.risk.model.domain.RiskAssess">
SELECT pra.id,pra.risk_grade
FROM pre_risk_assess pra
JOIN pre_todo_sub pts ON pra.todo_sub_id = pts.id
JOIN pre_project pp ON pts.project_id = pp.id
WHERE pp.id = #{projectId}
AND pts.status = 1
AND pra.status = 3
AND pts.operate_date = (
SELECT MAX(pts2.operate_date) AS max_start
FROM pre_todo_sub pts2
WHERE pts2.plan_id = pra.plan_id
and pts2.status = 1
)
ORDER BY pra.id
</select>