iBatis调用存储过程以及MySQL创建存储过程

首先是MySQL中创建存储过程的SQL

-- 列出所有的存储过程
SHOW PROCEDURE STATUS;

-- 查看一个已存在的存储过程的创建语句,如果此存储过程不存在,会提示SQL错误(1305):PROCEDURE pro_init does not exist
SHOW CREATE PROCEDURE pro_init;

-- 创建存储过程
DROP PROCEDURE IF EXISTS pro_init; -- 删除一个已存在的存储过程
DELIMITER //                       -- 声明当前MySQL分隔符为//
CREATE PROCEDURE pro_init(username VARCHAR(60), OUT userId INT)
BEGIN
	SELECT user_id INTO userId FROM user_info ui WHERE ui.username=username;
	IF userId IS NULL OR userId='' THEN
		SELECT 0 INTO userId;
	ELSE
		INSERT INTO t_worldcup_team(userId, teamAA, teamBB, updateTime, createTime)
		VALUES(userId, '巴西', '俄罗斯', NULL, now());
		INSERT INTO t_worldcup_team(userId, teamAA, teamBB, updateTime, createTime)
		VALUES(userId, '法国', '西班牙', NULL, now());
		INSERT INTO t_worldcup_team(userId, teamAA, teamBB, updateTime, createTime)
		VALUES(userId, '荷兰', '英格兰', NULL, now());
		INSERT INTO t_worldcup_team(userId, teamAA, teamBB, updateTime, createTime)
		VALUES(userId, '智利', '意大利', NULL, now());
		INSERT INTO t_worldcup_team(userId, teamAA, teamBB, updateTime, createTime)
		VALUES(userId, '伊朗', '葡萄牙', NULL, now());
		INSERT INTO t_worldcup_team(userId, teamAA, teamBB, updateTime, createTime)
		VALUES(userId, '希腊', '阿根廷', NULL, now());
	END IF;
END
//                                 -- 分隔符,表示此SQL语句结束

-- 调用存储过程
CALL pro_init('hongyu', @userId);
SELECT @userId;

下面是iBatis配置文件的写法

<parameterMap id="pro_init_Map" class="java.util.Map">
	<parameter property="username" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN"/>
	<parameter property="userId" javaType="java.lang.Integer" jdbcType="INT" mode="OUT"/>
</parameterMap>
<procedure id="pro_init" parameterMap="pro_init_Map">
	{call pro_init(?, ?)}
</procedure>

最后是Java调用类的写法

public int teamInit(String username) {
	int userId = 0;
	Map<String, Object> paramMap = new HashMap<String, Object>();
	paramMap.put("username", username);
	paramMap.put("userId", userId);
	this.getSqlMapClientTemplate().queryForObject("worldcup_guess.pro_init", paramMap);
	return (Integer)paramMap.get("userId");
}

iBatis调用存储过程以及MySQL创建存储过程

时间: 2025-01-15 12:37:39

iBatis调用存储过程以及MySQL创建存储过程的相关文章

mysql创建 存储过程 并通过java程序调用该存储过程

create table users_ning(id primary key auto_increment,pwd int); insert into users_ning values(id,1234); insert into users_ning values(id,12345); insert into users_ning values(id,12); insert into users_ning values(id,123); CREATE PROCEDURE login_ning(

[转]MYSQL 创建存储过程

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高. 一.MySQL 创建存储过程 "pr_add" 是个简单的

MySQL创建存储过程(CREATE PROCEDURE)

MySQL 存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程.下面我们来介绍一下如何创建一个存储过程. 基本语法 可以使用 CREATE PROCEDURE 语句创建存储过程. 语法格式如下: CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>[过程参数[,…] ] 格式[ IN | OUT | INOUT ]

mysql创建存储过程中的问题

1.在创建存储过程成功后,使用call 存储过程名执行时报错: Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT)错误. 解决方法:检查存储过程使用到的表格的编码方式,包括字段和表格本身.最后统一编码方式.在类型是属于字符.字符串这等类型的后面加上 CHARSET utf8 例: DELIMITER $$   USE `mall`$$   DROP PROCEDURE IF EXI

MySQL创建存储过程

存储过程和函数的区别参考链接: http://www.cnblogs.com/lengbingshy/archive/2010/02/25/1673476.html 创建存储过程: DROP PROCEDURE mypro;CREATE procedure mypro (sid INT,OUT sCount INT)BEGIN SELECT COUNT(*) INTO sCount from student where id = sid;END 执行该存储过程: CALL mypro(1,@c)

mysql 创建存储过程插入测试数据

做项目过程中遇到需要插入有序的测试数据,不想写php循环,网上找到方法,复习了一遍存储过程了哈哈.SQL语句参考自 https://stackoverflow.com/questions/26981901/mysql-insert-with-while-loop delimiter $$CREATE PROCEDURE myproc()BEGINDECLARE i int DEFAULT 9;WHILE i <= 1000 DOINSERT INTO test_tbl (test_url) VA

MYSQL中存储过程的创建,调用及语法

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高. 第一部分:创建一个简单的无参的存储过程 1 用mysql客户端登入

MySql中创建存储过程

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高. 一.MySQL 创建存储过程 "pr_add" 是个简单的

mysql 存储过程、视图---创建、调用、删除

之前一直用的是Sql Server数据库,最近偶然机会接触到mysql.这里总结了关于mysql 存储过程.视图的“创建.调用.删除”示例 =======================================存储过程================================== /*创建存储过程*/DELIMITER $$ /*为了避免冲突,首先用"DELIMITER &&"将MySQL的结束符设置为&&*/USE `DataName`$