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 注解写法 多层嵌套foreach,调用存储过程,批量插入数据