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 ()}
     ]]>

猜你喜欢

转载自blog.csdn.net/lyf_ldh/article/details/81142174