mybaits调用mysql存储函数和存储过程

//定义存储过程
create or replace procedure pag_add(p1 varchar2,p2 varchar2,p3 out varchar2)
   as
    begin
          p3:=p1+p2;
     end;
//定义存储函数
DELIMITER $$
CREATE  FUNCTION fun_add(p1 INT ,p2 INT) RETURNS INT
BEGIN

    RETURN p1+p2;
END $$
DELIMITER ;

定义接口
 
public interface CallMapper {
//    public void queryEmp(Map map);
        //查询存储过程的方法
        public void callProcedure(Map map);
        //查询函数的方法
        public void callFunction(Map map);
}

mapper文件
<?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="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>

测试类
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"));
    }
}

通用mapper使用:
service方法;
    public void sum(){
        Map map=new HashMap();
        map.put("p1", 100);
        map.put("p2", 200);
        userMapper.add(map);
        System.out.println(map.get("p3"));

    }
mapper接口:
public void add(Map map);
mapper文件:
    <select id="add" parameterType="map" statementType="CALLABLE">
          {
              #{p3,mode=OUT,jdbcType=INTEGER}=call fun_add(
                  #{p1,mode=IN,jdbcType=INTEGER},
               #{p2,mode=IN,jdbcType=INTEGER}
              )
          }
  </select>
 
 
      <![CDATA[
         {call prco_insert_orgtree ()}
     ]]>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值