mysql 存儲過程,以及mybatis如何調用


說道存儲過程,很多人都知道,但是真正用的人其實很少,但是在某些必要的場景,是必須使用的,雖然可以使用java代碼解決,但是效率性能遠不及存儲過程

曾經在sqlserver 以及pgadmin上用過,mysql還真沒使用過,今天遇到這樣的場景那就使用一次吧

場景:訂單自動失效,定時任務跑批的時候會查詢出失效的訂單,根據失效的訂單中的相關item的id,再做相應的處理

begin
     declare cargoSourceId varchar(20);
    
     declare done int;
     declare cur_test CURSOR for select cargo_source_id from orders where order_status = '10' and datediff(NOW(),update_time)>=3;
     declare continue handler FOR SQLSTATE '02000' SET done = 1;
     
         open cur_test;
         repeat
             fetch cur_test into cargoSourceId;
                         # 將要取消的失效對於的貨源全部更新為“未下單”狀態
             update cargo_source set is_ordered=0,update_time=now() where id=cargoSourceId;
         until done end repeat;
         close cur_test;
            # 失效訂單
            update orders set order_status='50', update_time=now() where order_status = '10' and datediff(NOW(),update_time)>=3;

 end

mybatis調用:

<!-- 調用存儲過程 -->
    <update id="updateOrderInvalidAfter3Days" statementType="CALLABLE">
         CALL updateOrderInvalidAfter3Days
     </update>

service調用:

@Autowired
    private OrdersMapper ordersMapper;
    
    @Override
    public void updateOrderInvalidAfter3Days() {
        int result = ordersMapper.updateOrderInvalidAfter3Days();
        System.out.println(result);
    }

tips:同樣的結果不同的手段,使用更優的手段來解決問題,幾年前我會選擇方便自己的做法,而現在要更多的考慮項目。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM