【问题标题】:MyBatis call stored procedure using delete annotationMyBatis 使用删除注解调用存储过程
【发布时间】: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) 事务由于某种原因被回滚。

标签: database annotations mybatis commit procedure


【解决方案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();***
}

【讨论】:

    猜你喜欢
    • 2013-03-18
    • 2020-02-24
    • 1970-01-01
    • 2017-04-29
    • 2015-11-02
    • 1970-01-01
    • 2015-02-27
    • 2014-05-26
    • 2023-03-26
    相关资源
    最近更新 更多