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";
}


       我们发现成功的执行了存储过程,并把数据正确的插入了数据库。这里使用的是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>

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


总结:

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

END

目录
相关文章
|
1月前
|
SQL druid Java
【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
【MyBatis】2、MyBatis 的动态 SQL 和增删改操作
29 0
|
6月前
|
SQL 存储 Java
Mybatis实战练习六【批量删除&Mybatis参数传递】(上)
Mybatis实战练习六【批量删除&Mybatis参数传递】
|
3月前
|
SQL XML Java
关于mybatis-plus写自定义方法(自定义sql)
关于mybatis-plus写自定义方法(自定义sql)
75 1
|
3月前
|
SQL Java 数据库连接
Mybatis之Mybatis的各种查询功能和特殊SQL的执行
【1月更文挑战第3天】 一、MyBatis的各种查询功能 1、查询一个实体类对象 2、查询一个List集合 3、查询单个数据 4、查询一条数据为map集合 5、查询多条数据为map集合 1、方法一 2、方法二 二、特殊SQL的执行 1、模糊查询 2、批量删除 3、动态设置表名 4、添加功能获取自增的主键
140 1
Mybatis之Mybatis的各种查询功能和特殊SQL的执行
|
5月前
|
存储 XML Java
Mybatis中使用存储过程实践
Mybatis中使用存储过程实践
76 0
|
6月前
|
存储 Java 数据库连接
MyBatis 调用存储过程
MyBatis 调用存储过程
30 0
|
9月前
|
XML 存储 Oracle
mybatis 注解调用Oracle存储过程
看别人的博客试了半天注解调用一直报错,然后试了试xml里面写,成功了
|
SQL XML 缓存
【MyBatis系列3】MyBatis SQL执行流程(一)
在《【MyBatis系列1】基础知识(上)》中,我们讲解了MyBaits的工作原理,以及它的四大核心组件的使用姿势,包括SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession和SQL Mapper。在《【MyBatis系列1】基础知识(下)》中,通过完整的MayBatis使用示例,详细讲解了MyBatis的XML配置文件。
194 0
【MyBatis系列3】MyBatis SQL执行流程(一)
|
存储 SQL Java
Mybatis学习笔记(四)调用存储过程
Mybatis学习笔记(四)调用存储过程
|
SQL XML 缓存
MyBatis是如何让我们通过接口就能调用到SQL的
MyBatis是如何让我们通过接口就能调用到SQL的
232 0