iBatis調用存儲過程以及MySQL創建存儲過程

完整版見https://jadyer.github.io/2014/05/29/ibatis-procedure/



首先是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");
}
發佈了360 篇原創文章 · 獲贊 338 · 訪問量 121萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章