一.调用存储过程

   1.首先在数据库中定义存储过程,定义的存储过程的代码如下:

  

  1. //定义存储过程
  2. 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;

  1.  

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

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

  3.定义映射文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5.   <!-- 此文件主要用于编写sql语句
  6.       namespace是为了解决相同名字的sql操作问题   -->
  7. <mapper namespace="cn.et.mybatis.lesson02.func.CallMapper">
  8.     <!-- statementType 声明指向的是什么类型,其中CALLABLE是执行存储过程和函数的-->
  9.     <select id="queryEmp" parameterType="map" statementType="CALLABLE">
  10.     {
  11.         call pag_add(
  12.             #{p1,mode=IN,jdbcType=NUMERIC},
  13.             #{p2,mode=IN,jdbcType=NUMERIC},
  14.             #{p3,mode=OUT,jdbcType=NUMERIC}
  15.         )
  16.     }    </select>
  17.     <!-- 定义存储过程 -->
  18.     <select id="callProcedure" parameterType="map" statementType="CALLABLE" >
  19.       {
  20.          call prg_add(
  21.                #{p1,mode=IN,jdbcType=NUMERIC},
  22.                #{p2,mode=IN,jdbcType=NUMERIC},
  23.                #{p3,mode=OUT,jdbcType=NUMERIC}
  24.          )
  25.       }  </select>
  26.   <!-- 定义函数 -->
  27.   <select id="callFunction" parameterType="map" statementType="CALLABLE">
  28.           {
  29.               #{p3,mode=OUT,jdbcType=NUMERIC}=call fun_add(
  30.                   #{p1,mode=IN,jdbcType=NUMERIC},
  31.                #{p2,mode=IN,jdbcType=NUMERIC}
  32.               )
  33.           }  </select>
  34. </mapper>

4.定义主mybaits.xml文件

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

 5.定义测试类

  1. package cn.et.mybatis.lesson02.func;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7.  
  8. import org.apache.ibatis.session.SqlSession;
  9. import org.apache.ibatis.session.SqlSessionFactory;
  10. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  11. import org.junit.Test;public class TestMyBatis {    //封装session的返回
  12.     public static SqlSession getSession(){
  13.         String resource = "/cn/et/mybatis/lesson02/mybatis.xml";
  14.         InputStream inputStream =TestMyBatis.class.getResourceAsStream(resource);
  15.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        //操作数据库的类 SqlSession
  16.         SqlSession session=sqlSessionFactory.openSession();        return session;
  17.     }    //调用存储过程
  18.     public static void main(String[] args) throws IOException {
  19.         SqlSession session=getSession();
  20.         CallMapper cm=session.getMapper(CallMapper.class);
  21.         Map map=new HashMap();
  22.         map.put("p1", 100);
  23.         map.put("p2", 200);
  24.         cm.callProcedure(map);
  25.         System.out.println(map.get("p3"));
  26.     }
  27.     
  28.     @Test    //调用函数
  29.     public void funTest(){
  30.         SqlSession session=getSession();
  31.         CallMapper cm=session.getMapper(CallMapper.class);
  32.         Map map=new HashMap();
  33.         map.put("p1", 100);
  34.         map.put("p2", 400);
  35.         cm.callFunction(map);
  36.         System.out.println(map.get("p3"));
  37.     }
  38. }

  以上为存储过程和函数的调用

//查询函数的方法public void callFunction(Map map);

MyBatis中调用存储过程和函数的更多相关文章

  1. Java中调用存储过程或函数

    //?代表一个参数,多个参数用逗号隔开 CallableStatement cs = connect.prepareCall("{?=call 存储过程名称或函数名(?)}"); ...

  2. 在mybatis中调用存储过程的时候,不能加工语句

    select count(0) from ({call pkg_business.P_ZZS_LYFPHJSKJQK ('2018-04')}) 这是错误的.

  3. ASP.NET中调用存储过程方法

    两种不同的存储过程调用方法 为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的“官方”方法.另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后不再一一说明.本文所 ...

  4. java调用存储过程和函数

    以对表test进行增,删,改,查进行说明:1.新建表test create table TEST ( TID NUMBER not null, TNAME VARCHAR2(32), TCODE VA ...

  5. 转:EF调用存储过程、函数

    EF调用存储过程.函数 2014-04-02 09:12:20|  分类: ORM框架|举报|字号 订阅          一.ef4.1 codeFirst 修改表结构 增加字段等 EF code ...

  6. SQL中的存储过程和函数

                                        存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如 ...

  7. MySQL中的存储过程和函数

    存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...

  8. MySQL学习笔记:调用存储过程或函数报1418错误

    问题 MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DE ...

  9. oracle中存储过程中调用存储过程

    存储过程中调用存储过程 create or replace package body PF_Role_Pack is procedure sp_GetPage_Role(pageSize_ in nu ...

随机推荐

  1. NaviSoft31.源码开发完成

    NaviSoft是作者一人开发完成,从之前的1.0版本,到现在的3.1版本.历经2年时间,开发完成 下面是NaviSoft的源码结构 加QQ群了解更多信息

  2. 第四百一十二节,python接口,抽象方法抽象类

    Python接口 在Python中所谓的接口,有两种,一种是通过url访问的api接口 一种是一个对象的接口 构造接口 class Ijiekou: """ 定义一个约束 ...

  3. saltstack通过jinja模板,将变量值增加到配置文件中?通过引用变量值修改配置文件?

    需求描述: 在使用saltstack的时候,有的时候,需要根据不同的变量来增加配置,比如,bind,监听端口,这些都可以通过变量写入,并且在配置的时候引用,下面是一个例子,用来演示,如何使用jinja ...

  4. rabbitmq 生产者 消费者(多个线程消费同一个队列里面的任务。) 一个通用rabbitmq消费确认,快速并发运行的框架。

    rabbitmq作为消息队列可以有消息消费确认机制,之前写个基于redis的通用生产者 消费者 并发框架,redis的list结构可以简单充当消息队列,但不具备消费确认机制,随意关停程序,会丢失一部分 ...

  5. <数字签名是什么>笔记

    此篇是看   数字签名是什么?    的理解与笔记 1. 使用非对称密钥发送数据到服务器. 发送方(C端)使用公钥对自己的数据进行加密,接收方(S端)使用私钥解密,即使发送出去的数据被拦截到,也不知道 ...

  6. exception ‘PHPExcel_Calculation_Exception‘ with message ‘粉丝数据!C2679 -> Formula Error: Operator ‘=‘ has no operands

    导致问题原因可能是导出字段中包含有  ‘=’  ,解决办法:在字段前拼上一个半单引号. if(strpos($lists[$i-2][‘nickname‘],‘=‘) === 0){ $lists[$ ...

  7. git clean(转载)

    git clean命令用来从你的工作目录中删除所有没有tracked过的文件. git clean经常和git reset --hard一起结合使用. 记住reset只影响被track过的文件, 所以 ...

  8. docker-compose & docker 镜像/加速

    docker-compose: http://sanwen.net/a/nuwruoo.html docker加速: http://guide.daocloud.io/dcs/daocloud-915 ...

  9. MUI - 复选框、单选框、使用js获取选择值

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  10. IIS多个应用程序共享Session

    在应用程序目录下面添加一个Global.asax文件,在文件中添加以下代码: public override void Init() { base.Init(); foreach (string mo ...