Java--SpringBoot-41-Mybatis-9-调用存储过程

简介: 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集。经编译后存储在数据库中。现在要使用Mybatis调用数据库的存储过程。我们来看下如何实现。

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集。经编译后存储在数据库中。现在要使用Mybatis调用数据库的存储过程。我们来看下如何实现。

一、新建一个存储过程:

dropPROCEDUREinsert_user;
CREATEPROCEDUREinsert_user(INidINTEGER,INuserNameVARCHAR(20),INpassWordVARCHAR(20),INrealNameVARCHAR(20))
BEGININSERTINTOuser (id,userName,passWord,realName) VALUES (id,userName,passWord,realName);
SETid=LAST_INSERT_ID();
END#调用下确认没问题callinsert_user(100,"存储过程","密码","存过");


二、在Mapper接口中新建一个方法:

packagecom.xing.mapper;
importcom.xing.entity.UserEntity;
importorg.apache.ibatis.annotations.*;
importorg.springframework.stereotype.Repository;
importjava.util.List;
/*** 面向接口*/@RepositorypublicinterfaceUserMapper {
/*** 存储过程 插入用户* @param user user*/voidinsertUserCG(UserEntityuser);
}

三、XML中编写对应的标签语句:

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.xing.mapper.UserMapper"><resultMapid="BaseResultMap"type="com.xing.entity.UserEntity"autoMapping="false"><resultcolumn="id"jdbcType="INTEGER"property="id"/><resultcolumn="userName"jdbcType="VARCHAR"property="userName"/><resultcolumn="passWord"jdbcType="VARCHAR"property="passWord"/><resultcolumn="realName"jdbcType="VARCHAR"property="realName"/></resultMap><selectid="getOne"resultType="com.xing.entity.UserEntity">select*fromuserwhereid=#{id}
</select><insertid="insertUserCG"parameterType="com.xing.entity.UserEntity"statementType="CALLABLE">        {
callinsert_user(
#{id,mode=IN,jdbcType=INTEGER},#{userName,mode=IN},#{passWord,mode=IN},#{realName,mode=IN}
            )
        }
</insert></mapper>

四、测试下:

/*** 新增* @param user user* @return ok*/@PostMapping("/insertCG")
publicStringinsertUserCG(@RequestBodyUserEntityuser){ 
userMapper.insertUserCD(user);‍‍return"ok";
}

结果:

image.png


       我们发现成功的执行了存储过程,并把数据正确的插入了数据库。这里使用的是insert标签,如果换一个标签来执行同样的语句,会不会成功呢?

再建一个Mapper及对应XML标签:

/***  试试select标签* @param user*/voidinsertUserCD2(UserEntityuser);
<selectid="insertUserCD2"parameterType="com.xing.entity.UserEntity"statementType="CALLABLE">   {
callinsert_user(
#{id,mode=IN,jdbcType=INTEGER},#{userName,mode=IN},#{passWord,mode=IN},#{realName,mode=IN}
      )
   }
</select>

结果:

image.png

       可以看出,这里sql语句的执行和标签没有关系,insert换成select后,同样执行了该存储过程。那么换成Java API来执行应该也是能够成功的。


总结:

       在代码开发中,使用Mybatis实现了存储过程的调用,本质上其实是用Mybatis执行了一句 call xxx存过();



END

目录
相关文章
|
6月前
|
存储 Oracle Java
Java调用存储过程小结
Java调用存储过程小结
|
存储 SQL Java
MySQL---数据库从入门走向大神系列(八)-在java中执行MySQL的存储过程
MySQL---数据库从入门走向大神系列(八)-在java中执行MySQL的存储过程
234 0
MySQL---数据库从入门走向大神系列(八)-在java中执行MySQL的存储过程
|
存储 Java Spring
Java调用存储过程长时间未执行完问题-解决方案
Java调用存储过程长时间未执行完问题-解决方案
|
存储 Java 数据库连接
|
存储 Java 关系型数据库
下一篇
无影云桌面