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:“;”
删除存过程
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>
更新:
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>
<!-- 更新购物车购买数量,以下两种方法等效 -->
<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>
条件:
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>
循环
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>
mysql存储过程且mybatis调用的更多相关文章
- MySQL存储过程_创建-调用
阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的"脚本" 创建存储过程 调用存储过程 存储过程体 语句块标签 存储过程的参数 in:向过程里传参 out:过程向 ...
- taskctl实现自定义mysql存储过程作业类型调用
TASKCTL支持任意作业类型的扩展,但目前TASKCTL 4.1.3版本中并没有内置mysql存储过程的作业插件.通过介绍使TASKCTL支持调度mysql存储过程作业类型的步骤,一方面解决一些朋友 ...
- sqlserver存储过程及mybatis调用——待续
创建带输入参数存储过程 use yanantestgoif exists (select * from sys.objects where name='yanan')drop procedure ya ...
- mysql 存储过程--- 创建,调用,删除
DELIMITER //CREATE PROCEDURE p_addscore(nums INT,OUT retrows INT)BEGINDECLARE i INT DEFAULT 0;add_lo ...
- MySQL存储过程的创建及调用
阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本” 1.创建存储过程 2.调用存储过程 3.存储过程体 4.语句块标签 存储过程的参数 1.in:向过程里传参 2.out:过 ...
- java, mybatis, 调用mysql存储过程
Map<String, Object> bindinfo = new HashMap<String, Object>(); bindinfo.put(&q ...
- MySQL 存储过程实例 与 ibatis/mybatis/hibernate/jdbc 如何调用存储过程
虽然MySQL的存储过程,一般情况下,是不会使用到的,但是在一些特殊场景中,还是有需求的.最近遇到一个sql server向mysql迁移的项目,有一些sql server的存储过程需要向mysql迁 ...
- mysql 存储过程,以及mybatis如何调用
说道存储过程,很多人都知道,但是真正用的人其实很少,但是在某些必要的场景,是必须使用的,虽然可以使用java代码解决,但是效率性能远不及存储过程 曾经在sqlserver 以及pgadmin上用过,m ...
- spring mybatis 3.2调用mysql存储过程返回多结果集(完整、亲测、可用)
最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的. ...
随机推荐
- visual studio相关操作
1.同一个解决方案下的两个项目之间怎么相互调用 在项目的“引用”上右键,添加引用,选你要引用的项目.然后在代码里就能调用引用项目里的某个类的方法了. 2.如果一个项目类型为”类库“的项目要运行,会报如 ...
- ASP.NET MVC 设置区域默认定向
public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "m_defau ...
- python3函数
一.python3函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.可以自己创建函数,这被叫做用户自定义函数. 1.定义函数规则 函 ...
- console报错类型
常见 console报错 Error 错误 EvalError 全局错误 RangeError 引用(范围)错误 ReferenceError 参数(参考)错误 SyntaxError 语法错误 ty ...
- 关于setTimeout的面试题
于地铁上看了一篇帖子,关于setTimeout的面试题,觉得见得多,记录,以学习之. 我们都知道,这样的一个例子: for ( var i = 0;i<5; i++) { console.log ...
- lodash源码分析之List缓存
昨日我沿着河岸/漫步到/芦苇弯腰喝水的地方 顺便请烟囱/在天空为我写一封长长的信 潦是潦草了些/而我的心意/则明亮亦如你窗前的烛光/稍有暧昧之处/势所难免/因为风的缘故 --洛夫<因为风的缘故& ...
- JavaSE(四)之接口、访问控制
上面我们学习了几个修饰符,在开发中经常会用的到,所以必须熟练的掌握.接下来我学习一下接口和访问控制. 一.接口 一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方 ...
- AFO
留坑 有点绝望 状态什么的,存在么 upd at 2017/11/14还算完满地结束了OI之路了吧.
- Team Queue(STL练习题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1387 Team Queue Time Limit: 2000/1000 MS (Java/Others ...
- 搭建ruby环境