MyBatis中调用存储过程和函数
一.调用存储过程
1.首先在数据库中定义存储过程,定义的存储过程的代码如下:

- //定义存储过程
- create or replace procedure pag_add(p1 varchar2,p2 varchar2,p3 =p1+
create or replace function fun_add(p1 number ,p2 number)
return number
as
begin
return p1+p2;
end;

2.通过接口映射Sql,定义接口

- package cn.et.mybatis.lesson02.func;
- import java.util.List;
- import java.util.Map;public interface CallMapper {// public void queryEmp(Map map); //查询存储过程的方法
- public void callProcedure(Map map); //查询函数的方法
- public void callFunction(Map map);
- }

3.定义映射文件

- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <!-- 此文件主要用于编写sql语句
- namespace是为了解决相同名字的sql操作问题 -->
- <mapper namespace="cn.et.mybatis.lesson02.func.CallMapper">
- <!-- statementType 声明指向的是什么类型,其中CALLABLE是执行存储过程和函数的-->
- <select id="queryEmp" parameterType="map" statementType="CALLABLE">
- {
- call pag_add(
- #{p1,mode=IN,jdbcType=NUMERIC},
- #{p2,mode=IN,jdbcType=NUMERIC},
- #{p3,mode=OUT,jdbcType=NUMERIC}
- )
- } </select>
- <!-- 定义存储过程 -->
- <select id="callProcedure" parameterType="map" statementType="CALLABLE" >
- {
- call prg_add(
- #{p1,mode=IN,jdbcType=NUMERIC},
- #{p2,mode=IN,jdbcType=NUMERIC},
- #{p3,mode=OUT,jdbcType=NUMERIC}
- )
- } </select>
- <!-- 定义函数 -->
- <select id="callFunction" parameterType="map" statementType="CALLABLE">
- {
- #{p3,mode=OUT,jdbcType=NUMERIC}=call fun_add(
- #{p1,mode=IN,jdbcType=NUMERIC},
- #{p2,mode=IN,jdbcType=NUMERIC}
- )
- } </select>
- </mapper>

4.定义主mybaits.xml文件

- <?xml version="1.0" encoding="UTF-8" ?>
- <!-- 说明mybatis的根节点 -->
- <!DOCTYPE configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <!--mybatis的根标签configuration -->
- <configuration>
- <!-- 资源文件的路径配置 注:cn前面不能用/否则会抛出异常-->
- <properties resource="cn/et/mybatis/lesson02/jdbc.properties">
- </properties>
- <!-- 配置连接数据库的环境,(开发环境) -->
- <environments default="development">
- <environment id="development">
- <!-- 事务交给jdbc管理,Conection(事务) commit(提交) rollback(回滚) -->
- <transactionManager type="JDBC"/>
- <!-- 数据源 用来连接数据库(包含四要素,driver,url,username,password) -->
- <dataSource type="POOLED">
- <property name="driver" value="${driverClass}"/>
- <property name="url" value="${url}"/>
- <property name="username" value="${userAccount}"/>
- <property name="password" value="${password}"/>
- </dataSource>
- </environment>
- </environments>
- <!-- 包含隐射文件主要用于编写sql语句 -->
- <mappers>
- <!-- 隐射的资源文件 隐射文件主要编写sql语句 -->
- <mapper resource="cn/et/mybatis/lesson02/func/call_mapper.xml"/>
- </mappers>
- </configuration>

5.定义测试类

- package cn.et.mybatis.lesson02.func;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.HashMap;
- import java.util.Map;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- import org.junit.Test;public class TestMyBatis { //封装session的返回
- public static SqlSession getSession(){
- String resource = "/cn/et/mybatis/lesson02/mybatis.xml";
- InputStream inputStream =TestMyBatis.class.getResourceAsStream(resource);
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //操作数据库的类 SqlSession
- SqlSession session=sqlSessionFactory.openSession(); return session;
- } //调用存储过程
- public static void main(String[] args) throws IOException {
- SqlSession session=getSession();
- CallMapper cm=session.getMapper(CallMapper.class);
- Map map=new HashMap();
- map.put("p1", 100);
- map.put("p2", 200);
- cm.callProcedure(map);
- System.out.println(map.get("p3"));
- }
- @Test //调用函数
- public void funTest(){
- SqlSession session=getSession();
- CallMapper cm=session.getMapper(CallMapper.class);
- Map map=new HashMap();
- map.put("p1", 100);
- map.put("p2", 400);
- cm.callFunction(map);
- System.out.println(map.get("p3"));
- }
- }

以上为存储过程和函数的调用
//查询函数的方法public void callFunction(Map map);
MyBatis中调用存储过程和函数的更多相关文章
- Java中调用存储过程或函数
//?代表一个参数,多个参数用逗号隔开 CallableStatement cs = connect.prepareCall("{?=call 存储过程名称或函数名(?)}"); ...
- 在mybatis中调用存储过程的时候,不能加工语句
select count(0) from ({call pkg_business.P_ZZS_LYFPHJSKJQK ('2018-04')}) 这是错误的.
- ASP.NET中调用存储过程方法
两种不同的存储过程调用方法 为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的“官方”方法.另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后不再一一说明.本文所 ...
- java调用存储过程和函数
以对表test进行增,删,改,查进行说明:1.新建表test create table TEST ( TID NUMBER not null, TNAME VARCHAR2(32), TCODE VA ...
- 转:EF调用存储过程、函数
EF调用存储过程.函数 2014-04-02 09:12:20| 分类: ORM框架|举报|字号 订阅 一.ef4.1 codeFirst 修改表结构 增加字段等 EF code ...
- SQL中的存储过程和函数
存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如 ...
- MySQL中的存储过程和函数
存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...
- MySQL学习笔记:调用存储过程或函数报1418错误
问题 MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DE ...
- oracle中存储过程中调用存储过程
存储过程中调用存储过程 create or replace package body PF_Role_Pack is procedure sp_GetPage_Role(pageSize_ in nu ...
随机推荐
- NaviSoft31.源码开发完成
NaviSoft是作者一人开发完成,从之前的1.0版本,到现在的3.1版本.历经2年时间,开发完成 下面是NaviSoft的源码结构 加QQ群了解更多信息
- 第四百一十二节,python接口,抽象方法抽象类
Python接口 在Python中所谓的接口,有两种,一种是通过url访问的api接口 一种是一个对象的接口 构造接口 class Ijiekou: """ 定义一个约束 ...
- saltstack通过jinja模板,将变量值增加到配置文件中?通过引用变量值修改配置文件?
需求描述: 在使用saltstack的时候,有的时候,需要根据不同的变量来增加配置,比如,bind,监听端口,这些都可以通过变量写入,并且在配置的时候引用,下面是一个例子,用来演示,如何使用jinja ...
- rabbitmq 生产者 消费者(多个线程消费同一个队列里面的任务。) 一个通用rabbitmq消费确认,快速并发运行的框架。
rabbitmq作为消息队列可以有消息消费确认机制,之前写个基于redis的通用生产者 消费者 并发框架,redis的list结构可以简单充当消息队列,但不具备消费确认机制,随意关停程序,会丢失一部分 ...
- <数字签名是什么>笔记
此篇是看 数字签名是什么? 的理解与笔记 1. 使用非对称密钥发送数据到服务器. 发送方(C端)使用公钥对自己的数据进行加密,接收方(S端)使用私钥解密,即使发送出去的数据被拦截到,也不知道 ...
- exception ‘PHPExcel_Calculation_Exception‘ with message ‘粉丝数据!C2679 -> Formula Error: Operator ‘=‘ has no operands
导致问题原因可能是导出字段中包含有 ‘=’ ,解决办法:在字段前拼上一个半单引号. if(strpos($lists[$i-2][‘nickname‘],‘=‘) === 0){ $lists[$ ...
- git clean(转载)
git clean命令用来从你的工作目录中删除所有没有tracked过的文件. git clean经常和git reset --hard一起结合使用. 记住reset只影响被track过的文件, 所以 ...
- docker-compose & docker 镜像/加速
docker-compose: http://sanwen.net/a/nuwruoo.html docker加速: http://guide.daocloud.io/dcs/daocloud-915 ...
- MUI - 复选框、单选框、使用js获取选择值
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- IIS多个应用程序共享Session
在应用程序目录下面添加一个Global.asax文件,在文件中添加以下代码: public override void Init() { base.Init(); foreach (string mo ...