zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    java 网络编程基础 InetAddress类;URLDecoder和URLEncoder;URL和URLConnection;多线程下载文件示例
    java 图形化工具Swing 颜色文件选择器 ;JColorChooser;JFileChoose
    java 图形化工具Swing 创建工具条
    2021年XX百万职工技能大赛-网络与信息安全管理员理论题复习题库(第二套)
    2021年XX百万职工技能大赛-网络与信息安全管理员理论题复习题库(第一套)
    百度ABC相关学习和笔记
    Ai趣味课堂笔记 -- 第二季 计算机视觉
    Ai趣味课堂笔记 -- 第一季 人工智能基础知识
    CKA-Kubernets(K8s) (四)
    CKA-Kubernets(K8s) (三)
  • 原文地址:https://www.cnblogs.com/fengquan-blog/p/10521403.html
Copyright © 2011-2022 走看看