问题来源:在一个项目中,现需要删除开发商信息(仅仅进行逻辑删除,将其有效标志设为0),删除开发商信息之后,该开发商对应的接入系统信息,服务信息,发布者信息都需要进行删除。我在Service中写下
public int deleteKfs(IDTO dto) throws Exception{
logger.info("根据ID更新有效标志为0");
Map<String, Object> rtnMap = new HashMap<String, Object>();
Map<String,Object> paramsMap = dto.getData();
......
int del=commDAO.delete(KFSGL + "KFSGL_DKFS", paramsMap);
......
return del;
}
打算直接调用mybatis中的一条配置信息进行所有的"delete"操作,mybatis中的配置如下:
<!-- 删除操作开发商信息操作,直接将不可用状态设置为0,并且将该开发商对应的operator(AAE100),
系统接入信息(yxbz),服务信息,订阅者信息,凭证信息全部设为无效 -->
<update id="KFSGL_DKFS" parameterType="hashmap">
<!-- 开发商 -->
update FW_SYPT_KFSJLB <set> YXBZ='0' </set> WHERE ID=#{ID};
update Fw_sypt_xtjrjlb <set> YXBZ='0' </set> WHERE KFSID=#{ID};
update fw_sypt_fbzjlb <set> fw_sypt_fbzjlb.yxbz='0' </set>
where fw_sypt_fbzjlb.ssxtid = any(select id from Fw_sypt_xtjrjlb where kfsid=#{ID});
update fw_sypt_pzjlb <set> fw_sypt_pzjlb.yxbz='0'</set>
where fw_sypt_pzjlb.ssxtid = any(select id from Fw_sypt_xtjrjlb where kfsid=#{ID});
update fw_sypt_dyzjlb <set> fw_sypt_dyzjlb.yxbz='0' </set>
where fw_sypt_dyzjlb.ssxtid = any(select id from Fw_sypt_xtjrjlb where kfsid=#{ID})
</update>
运行的时候后台报错,提示sql语句错误!!
原因初步判断为:在正式执行的时候,是不能将这个分号扔到Oracle的解析器中的,Oracle的语法解析器特别严格,mybatis中的sql语句末尾不能写分号,因此就规定了一个配置语句中只能有一条sql语句。
最后改成:
Service文件中:
int del=commDAO.delete(KFSGL + "KFSGL_DKFS", paramsMap);
commDAO.delete(KFSGL + "KFSGL_DOPER", paramsMap);
commDAO.delete(KFSGL + "KFSGL_DXTJR", paramsMap);
commDAO.delete(KFSGL + "KFSGL_DFBZ", paramsMap);
commDAO.delete(KFSGL + "KFSGL_DPZ", paramsMap);
commDAO.delete(KFSGL + "KFSGL_DDYZ", paramsMap);
Mapper.xml文件中:
<!-- 删除操作开发商信息操作,直接将不可用状态设置为0,并且将该开发商对应的operator(AAE100),
系统接入信息(yxbz),服务信息,订阅者信息,凭证信息全部设为无效 -->
<update id="KFSGL_DKFS" parameterType="hashmap">
<!-- 开发商 -->
update FW_SYPT_KFSJLB <set> YXBZ='0' </set> WHERE ID=#{ID}
</update>
<!-- 操作员 -->
<update id="KFSGL_DOPER" parameterType="hashmap">
update FW_OPERATOR <set> AAE100='0' </set> WHERE POSITION=#{ID}
</update>
<!-- 系统接入信息 -->
<update id="KFSGL_DXTJR" parameterType="hashmap">
update Fw_sypt_xtjrjlb <set> YXBZ='0' </set> WHERE KFSID=#{ID}
</update>
<!-- 发布者 -->
<update id="KFSGL_DFBZ" parameterType="hashmap">
update fw_sypt_fbzjlb <set> fw_sypt_fbzjlb.yxbz='0' </set>
where fw_sypt_fbzjlb.ssxtid = any(select id from Fw_sypt_xtjrjlb where kfsid=#{ID})
</update>
<!-- 凭证 -->
<update id="KFSGL_DPZ" parameterType="hashmap">
update fw_sypt_pzjlb <set> fw_sypt_pzjlb.yxbz='0'</set>
where fw_sypt_pzjlb.ssxtid = any(select id from Fw_sypt_xtjrjlb where kfsid=#{ID})
</update>