• mysql存储过程且mybatis调用


      首先,需要执行符DELIMITER ,建议用//,即在存储过程开始前定义delimiter //,在结束后加上//,最后加上DELIMITER ; 具体原因@参考文章1写的很清楚,不再赘述。

    参考文章1中的示例:

    delimiter //;     -- 改变 MySQL delimiter 为:“//”   
      
    drop procedure if exists pr_stat_agent //   
      
    -- call pr_stat_agent ('2008-07-17', '2008-07-18')   
      
    create procedure pr_stat_agent   
    (   
       pi_date_from  date   
      ,pi_date_to    date   
    )   
    begin   
       -- check input   
       if (pi_date_from is null) then   
          set pi_date_from = current_date();   
       end if;   
      
       if (pi_date_to is null) then   
          set pi_date_to = pi_date_from;   
       end if;   
      
       set pi_date_to = date_add(pi_date_from, interval 1 day);   
      
       -- stat   
       select agent, count(*) as cnt   
         from apache_log   
        where request_time >= pi_date_from   
          and request_time <  pi_date_to   
        group by agent   
        order by cnt desc;   
    end; //   
      
    delimiter ; //   -- 改回默认的 MySQL delimiter:“;”   
    View Code

     删除存过程

    drop procedure p_name;

    完整示例:

    mybatis调用:

    <!-- 根据用户id获取姓名Zhangyn,以下两种方法等效 -->
      <select id="getUserName" resultType="java.lang.String">
          <!-- select name from user where id=#{0} -->
          {call yanan.get_user_name(#{0,jdbcType=INTEGER,mode=IN})}  
      </select>
    View Code

     更新:

    mysql> use zyt;
    Database changed
    mysql> delimiter //
    mysql> create procedure updateordercountbyid(in cid int,in ordercount int,in personinfoid int)
        -> begin
        -> update t_cartgoods set orderCount=ordercount where cartGoodsId=cid and personInfoId=personinfoid;
        -> end //
    Query OK, 0 rows affected
    
    mysql> 
    View Code
    <!--  更新购物车购买数量,以下两种方法等效 -->
        <update id="updateOrderCountByCartId" >
            <!-- update t_cartgoods set orderCount=#{1} where cartGoodsId=#{0} and personInfoId=#{2} -->
            {call yanan.updateordercountbyid(#{0,jdbcType=INTEGER,mode=IN},#{1,jdbcType=INTEGER,mode=IN},#{2,jdbcType=INTEGER,mode=IN})}
        </update>
    View Code

     条件:

    mysql> use yanan;
    Database changed
    mysql> delimiter //
    mysql> create procedure test(in i int) begin declare t int;if(i<=2) then set t=3;else set t=1;end if;select * from user where id=t;end //
    Query OK, 0 rows affected
    mysql> delimiter ;
    mysql> call test(0);
    +----+------+
    | id | name |
    +----+------+
    |  3 | 1234 |
    +----+------+
    1 row in set
    
    Query OK, 0 rows affected
    
    mysql> call test(1);
    +----+------+
    | id | name |
    +----+------+
    |  3 | 1234 |
    +----+------+
    1 row in set
    
    Query OK, 0 rows affected
    
    mysql> call test(2);
    +----+------+
    | id | name |
    +----+------+
    |  3 | 1234 |
    +----+------+
    1 row in set
    
    Query OK, 0 rows affected
    
    mysql> call test(3);
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | yanan |
    +----+-------+
    1 row in set
    
    Query OK, 0 rows affected
    
    mysql> call test(4);
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | yanan |
    +----+-------+
    1 row in set
    
    Query OK, 0 rows affected
    
    mysql> select * from user;
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | yanan |
    |  2 | zhang |
    |  3 | 1234  |
    |  4 | 7890  |
    +----+-------+
    4 rows in set
    
    mysql> 
    View Code

     循环

    mysql> drop procedure test;
    Query OK, 0 rows affected
    
    mysql> delimiter //
    mysql> create procedure test(in i int) begin declare t int;
        -> while i<4 do 
        -> set i=i+1;end while; set t=i;select * from user where id=t;end //
    Query OK, 0 rows affected
    mysql> delimiter ;
    mysql> select * from user;
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | yanan |
    |  2 | zhang |
    |  3 | 1234  |
    |  4 | 7890  |
    +----+-------+
    4 rows in set
    
    mysql> call test(-1);
    +----+------+
    | id | name |
    +----+------+
    |  4 | 7890 |
    +----+------+
    1 row in set
    
    Query OK, 0 rows affected
    
    mysql> call test(4);
    +----+------+
    | id | name |
    +----+------+
    |  4 | 7890 |
    +----+------+
    1 row in set
    
    Query OK, 0 rows affected
    
    mysql> call test(5);
    Empty set
    
    Query OK, 0 rows affected
    
    mysql> 
    View Code
  • 相关阅读:
    安装好k8s后,使用kubectl get cs 查看状态,发现 controller-manager scheduler Unhealthy
    k8s 去掉node标签 难去的
    项目中常用到的布局 flex
    scanf输入空格
    sed和awk学习第一天
    线程池
    线程间通信 | 等待唤醒机制
    创建线程的三种方法详细对比
    EXCEL中VLOOKUP函数的使用
    Vulnhub实战靶场:GAARA: 1
  • 原文地址:https://www.cnblogs.com/yanan7890/p/7123082.html
Copyright © 2020-2023  润新知