我需要从MyBatis中的PL / SQL块返回一个值。
PL / SQL块是这样的:
DECLARE
BEGIN
<foreach collection="params" item="param">
UPDATE PRIORITIES
SET PRIORITY = #{param.priority}
WHERE ID = #{param.id};
</foreach>
END
我需要返回一个值的原因是我希望能够获得受影响的行数。
我知道我可以这样做:
<update id="updateAll" parameterType="map">
{ call
DECLARE
BEGIN
<foreach collection="params" item="param">
UPDATE PRIORITIES
SET PRIORITY = #{param.priority}
WHERE ID = #{param.id};
</foreach>
#{affected_rows, jdbcType=DECIMAL, mode=OUT} := sql%rowcount;
END
}
</update>
但这意味着我必须在java mapper中有这样的方法:
public void updateAll(Map<String, String> parameters);
我改为:
public int updateAll(@Param("params") List<PriorityModel> model);
有没有办法在没有地图的情况下返回该值?
答案 0 :(得分:0)
我认为您无法从过程调用中返回值。它可以在像对象这样的对象中设置一个值,就像你的例子一样,但是,我认为如果你在同一个sql事务中执行一个查询后更新像这样:
SELECT sql%rowcount FROM DUAL;
您可以像ResultSet一样获取受影响的行数。