因为要对接项目的mysql数据库,部分语句要使用到mysql的存储过程,保证调用的一致性。
在网上查找了好多种方式,都很复杂,而且我试验了好多种,都没有成功。最后使用了
EntityManager的createNamedStoredProcedureQuery调用,成功执行mysql的存储过程。
现将方式记录,以便后面查阅。
1.mysql的存储过程很复杂,主要是用户注册,需要向两个表中插入数据
CREATE DEFINER=`demodb`@`%` PROCEDURE `user_register`(
in_password VARCHAR(50),
in_device_os VARCHAR(20),
in_device_os_version VARCHAR(30),
in_device_support_tele INT,
in_device_manufactory VARCHAR(40),
in_device_model VARCHAR(30),
in_app_mobile_version VARCHAR(20),
in_gmail VARCHAR(30),
in_verified TINYINT,
in_cc VARCHAR(20),
in_account VARCHAR(128),
in_mn VARCHAR(20),
OUT ret_passwd VARCHAR(50),
OUT ret_userid VARCHAR(30),
OUT ret_flag INT)
BEGIN
DECLARE var_get_userid VARCHAR(30);
DECLARE start_pos INT;
DECLARE var_mn VARCHAR(30);
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET ret_flag=-1;
ROLLBACK;
END;
START TRANSACTION;
SET @dt = NOW();
SET @dtunix=UNIX_TIMESTAMP(@dt);
SET @sid = REPLACE(UUID(),'-','');
SET start_pos=CEIL(RAND()*1000);
SELECT id INTO var_get_userid
FROM useridtable
LIMIT start_pos,1;
DELETE FROM useridtable
WHERE id=var_get_userid;
IF in_mn='' THEN
SET var_mn=CON