这篇“mybatis如何调用mysql存储过程”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“mybatis如何调用mysql存储过程”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让我们一起来看看具体内容吧。
使用Map接收返回参数,output参数放在传入的param中
创建表
DROP TABLE IF EXISTS `demo`; CREATE TABLE `demo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of demo -- ---------------------------- INSERT INTO `demo` VALUES ('1', '测试');
创建存储过程
DROP PROCEDURE IF EXISTS pro; CREATE PROCEDURE pro ( IN userId INT, OUT userCount INT ) BEGIN DECLARE user_name VARCHAR (64); SELECT NAME FROM demo WHERE id = userId INTO user_name; INSERT INTO demo (NAME) VALUES (user_name); SELECT COUNT(*) FROM demo INTO userCount; END;
mapper.xml
<select id="procedureTest" parameterMap="pm" statementType="CALLABLE"> CALL pro(#{userId,mode=IN},#{userCount,mode=OUT,jdbcType=INTEGER}); </select> <parameterMap id="pm" type="java.util.Map"> <parameter property="userId" jdbcType="INTEGER" mode="IN"></parameter> <parameter property="userCount" jdbcType="INTEGER" mode="OUT"></parameter> </parameterMap>
service
@Override public void procedureTest() { Map<String, Object> param = new HashMap<>(); param.put("userId", "1"); demoMapper.procedureTest(param); System.out.println("输出结果是:"+param.get("userCount")); }
输出结果
参数名不一定和存储过程一样,只和传参顺有关,使用下图配置同样可以获取结果
System.out.println("输出结果是:"+param.get("userCount_2"));
1、 存储过程的参数和名称无关,只和顺序有关系
2、 存储过程的output参数,只能通过传入的map获取
3、 存储过程返回的结果集可直接用返回的map接收
4、 存储过程的return结果需要使用?=call procName(?,?)的第一个参数接收,需要指定对应的mode为OUT类型
5、 存储过程对应的数据类型为枚举类型,需要使用大写,如VARCHAR
output是在存储过程中的参数的返回值(输出参数),而ReturnValue是存储过程返回的值(使用return关键字),一个存储过程可以有任意多个依靠参数返回的值,但只有一个ReturnValue。
1、返回记录集的存储过程:执行结果是一个记录集,例如,从数据库中检索出符合某一个或几个条件的记录。
2、返回数值得的存储过程(也可称为标量存储过程),其执行完后返回一个值,例如数据库中执行一个有返回值的函数或命令。
3、行为存储过程,用来实现数据库的某个功能,而没有返回值,例如在数据库中的更新和删除操作。
使用list接收
@Override public void procedureTest() { Map<String, Object> param = new HashMap<>(); param.put("userId", "1"); List<?> list = demoMapper.procedureTest(param); System.out.println("输出结果是:" + param.get("userCount_2")); System.out.println("输出集合:" + list.size()); }
<select id="procedureTest" parameterMap="pm" statementType="CALLABLE" resultMap="rm"> CALL pro(#{userId,mode=IN},#{userCount_2,mode=OUT,jdbcType=INTEGER}); </select> <parameterMap id="pm" type="java.util.Map"> <parameter property="userId" jdbcType="INTEGER" mode="IN"></parameter> <parameter property="userCount_2" jdbcType="INTEGER" mode="OUT"></parameter> </parameterMap> <resultMap id="rm" type="com.csstj.srm.entity.procedureTestEntity"> <result column="id" property="id"></result> <result column="name" property="userName"></result> </resultMap>
CALL s_generatePlan_new ( #{organizationId, mode=IN,jdbcType=VARCHAR}, #{gradeId, mode=IN,jdbcType=VARCHAR}, #{semesterId, mode=IN,jdbcType=VARCHAR}, #{className, mode=IN,jdbcType=VARCHAR}, #{employeeCode, mode=IN,jdbcType=VARCHAR}, #{courseName, mode=IN,jdbcType=VARCHAR}, #{classroomName, mode=IN,jdbcType=VARCHAR}, #{approverId, mode=IN,jdbcType=VARCHAR}, #{createBy, mode=IN,jdbcType=VARCHAR}, #{total,mode=OUT ,jdbcType=VARCHAR})
感谢你的阅读,希望你对“mybatis如何调用mysql存储过程”这一关键问题有了一定的理解,具体使用情况还需要大家自己动手实验使用过才能领会,快去试试吧,如果想阅读更多相关知识点的文章,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。