Bac*_*ash 5 java oracle oracle11g mybatis
我需要从MyBatis中的PL/SQL块返回一个值.
PL/SQL块是这样的:
DECLARE
BEGIN
<foreach collection="params" item="param">
UPDATE PRIORITIES
SET PRIORITY = #{param.priority}
WHERE ID = #{param.id};
</foreach>
END
Run Code Online (Sandbox Code Playgroud)
我需要返回一个值的原因是我希望能够获得受影响的行数.
我知道我可以这样做:
<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>
Run Code Online (Sandbox Code Playgroud)
但这意味着我必须在java mapper中有这样的方法:
public void updateAll(Map<String, String> parameters);
Run Code Online (Sandbox Code Playgroud)
我改为:
public int updateAll(@Param("params") List<PriorityModel> model);
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有地图的情况下返回该值?
小智 1
我认为您无法从过程调用中返回值。可以在像 pojo 这样的对象或像您的示例一样的地图中设置一个值,但是,我认为如果您在同一个 sql 事务中在更新后执行查询,如下所示:
SELECT sql%rowcount FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
您可以像 ResultSet 一样获取受影响的行数。
| 归档时间: |
|
| 查看次数: |
1005 次 |
| 最近记录: |