Mybatis调用Mysql数据库存储过程

Mybatis调用Mysql数据库存储过程

存储过程(Stored Procedure)是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

如果使用Mybatis框架,那么如何调用存储过程呢?

例子:带参数并返回一个结果集

  • 1、存储过程(查询当前用户的所有子部门)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
DELIMITER $$

USE `pcloud_outEmployees`$$

DROP PROCEDURE IF EXISTS `sp_findChildDeptListByUserId`$$

CREATE DEFINER=`root`@`%` PROCEDURE `sp_findChildDeptListByUserId`(userId BIGINT(20))
BEGIN
DECLARE dIdStr TEXT;
DECLARE dId TEXT;
SET dIdStr = '';
#查询当前用户的所有部门Id
SET dId = (SELECT GROUP_CONCAT(d.dept_id) FROM tb_user_dept d WHERE d.user_id =userId);
#查询所有部门下的子部门Id
WHILE dId IS NOT NULL DO
IF dIdStr = '' THEN
SET dIdStr = CONCAT(dIdStr, dId);
ELSE
SET dIdStr = CONCAT(dIdStr, ',', dId);
END IF;

SELECT GROUP_CONCAT(dept_id) INTO dId FROM tb_dept WHERE FIND_IN_SET(parent_id, dId) > 0;
END WHILE;
#查询所有部门
SELECT DISTINCT d.dept_name AS `label`,d.dept_id AS `value`,d.dept_id AS id,d.parent_id AS parentId FROM tb_dept d WHERE FIND_IN_SET(d.dept_id, dIdStr) > 0;
END$$

DELIMITER ;
  • 2、DAO和XML
1
2
3
4
5
List<DeptCas> sp_findChildDeptListByUserId(@Param("userId")Long userId);

<select id="sp_findChildDeptListByUserId" resultType="cn.pconline.pcloud.base.vo.DeptCas" statementType="CALLABLE">
call sp_findChildDeptListByUserId(#{userId,mode=IN,jdbcType=BIGINT})
</select>

参考文档:

https://www.cnblogs.com/xiaoxi/p/6606011.html

https://www.jiweichengzhu.com/article/2435813e67d14d0b9d003031ad07559a

-------------已经触及底线 感谢您的阅读-------------

本文标题:Mybatis调用Mysql数据库存储过程

文章作者:趙小傑~~

发布时间:2019年12月10日 - 10:28:53

最后更新:2020年03月01日 - 19:50:39

原始链接:https://cnsyear.com/posts/d5a4cd6d.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%