前言
博主github
博主个人博客http://blog.healerjean.com
准备数据
CREATE TABLE `demo_entity` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`age` bigint(20) DEFAULT '0',
`cdate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`udate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
1、存储过程的调用
存储过程主要返回三类
1、返回数值得的存储过程,其执行完后返回一个值,例如数据库中执行一个有返回值的函数或命令。
2、返回记录集的存储过程:执行结果是一个记录集,例如,从数据库中检索出符合某一个或几个条件的记录。
3、行为存储过程,用来实现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。
1、接收一个返回值
1.1、创建存储过程
1.1、返回out变量
DROP PROCEDURE IF EXISTS pro;
CREATE PROCEDURE pro (
IN userId INT,
OUT userCount INT
)
BEGIN
DECLARE user_name VARCHAR (64);
SELECT d.name FROM demo_entity d WHERE d.id = userId INTO user_name;
INSERT INTO demo_entity (name) VALUES (user_name);
SELECT COUNT(*) FROM demo_entity INTO userCount;
end;
call pro(1,@userCount);
select @userCount ;
1.2、返回集合和out变量
CREATE PROCEDURE pro_one_list (
IN p_name varchar(20),
OUT userCount INT
)
BEGIN
select count(*) from demo_entity d where d.name = p_name into userCount ;
SELECT * FROM demo_entity d where d.name = p_name;
end;
call pro_one_list('HealerJean',@userCount);
select @userCount ;
1.3、返回多列集合和变量
drop procedure pro_many_list ;
CREATE PROCEDURE pro_many_list (
IN one_name varchar(20),
IN two_name varchar(20),
OUT userCount INT
)
BEGIN
select count(*) from demo_entity d where d.name = one_name into userCount ;
SELECT d.* FROM demo_entity d where d.name = one_name;
SELECT e.* FROM demo_entity e where e.name = two_name;
end;
call pro_many_list('HealerJean','Healer',@userCount);
select @userCount ;
1.2、mybatis xml 配置
out 中必须制定jdbc类型,因为存储过程会对它进行赋值操作
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace=<