MyBatis 使用删除注解调用存储过程

Posted

技术标签:

【中文标题】MyBatis 使用删除注解调用存储过程【英文标题】:MyBatis call stored procedure using delete annotation 【发布时间】:2021-10-31 22:54:05 【问题描述】:

我有这个 Java 方法

@Override
public void callDelete_old_orders
        (int order_id) throws Exception 
    SqlSession sqlSession = getSqlSession();
    OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
    
    mapper.callDelete_old_orders(order_id); 

MyBatis 删除注解接口

public interface OrderMapper 
    @Delete ("CALL delete_old_orders(# order_id, mode = IN, jdbcType = INTEGER) ")
    @Options(statementType = StatementType.CALLABLE)
    public void callDelete_old_orders(int order_id);

和程序

CREATE DEFINER=`myself`@`localhost` PROCEDURE `pizza_bro`.`delete_old_orders`(
    IN in_order_id INT)
begin
    delete from pizza_order where order_id <= in_order_id;
end

什么可以防止从 MariaDB 表中删除记录?

【问题讨论】:

如果直接在@Delete 中写入DELETE 语句(并删除@Options)会怎样? 奇怪的是,@Delete("delete from Pizza_order where order_id 假设它没有抛出任何异常,这可能意味着 1) 没有匹配 WHERE 条件的行或 2) 事务由于某种原因被回滚。 【参考方案1】:

我应该在映射器方法调用之后放置提交语句,如下所示:

@Override
public void callDelete_old_orders(int order_id) throws Exception 
    SqlSession sqlSession = getSqlSession();
    OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);

    mapper.callDelete_old_orders(order_id);
    ***sqlSession.commit();***

【讨论】:

以上是关于MyBatis 使用删除注解调用存储过程的主要内容,如果未能解决你的问题,请参考以下文章

mybatis 调用存储过程

mybatis 注解写法 多层嵌套foreach,调用存储过程,批量插入数据

mybatis 调用存储过程进行批量修改操作(只需要一次调用存储过程),不知道如何配置配置文件

12mybatis调用执行存储过程

mybatis调用视图和存储过程

使用 Mybatis 将布尔参数传递给存储过程