1. 程式人生 > >MyBatis中呼叫儲存過程和函式

MyBatis中呼叫儲存過程和函式

一.呼叫儲存過程

   1.首先在資料庫中定義儲存過程,定義的儲存過程的程式碼如下:

複製程式碼
//定義儲存過程
create or replace procedure pag_add(p1 varchar2,p2 varchar2,p3 out varchar2) as begin p3:=p1+p2; end;

//定義函式

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呼叫儲存過程函式

一.呼叫儲存過程    1.首先在資料庫中定義儲存過程,定義的儲存過程的程式碼如下: //定義儲存過程create or replace procedure pag_add(p1 varchar2,p2 varchar2,p3 out varchar2) as begin

MySQL儲存過程函式使用詳解

一.對待儲存過程和函式的態度 在實際專案中應該儘量少用儲存過程和函式,理由如下: 1.移植性差,在MySQL中的儲存過程移植到sqlsever上就不一定可以用了。 2.除錯麻煩,在db中報一個錯誤和在應用層報一個錯誤不是一個概念,那將是毀滅性打擊,直接一個error:1045什麼的更本毫無頭緒。 3.擴充套件

JDBC呼叫儲存過程函式

  JDBC呼叫儲存過程和函式 在資料庫中我們可以寫一些儲存過程和函式,來封裝一些常用的SQL語句,儲存過程和函式目的是為了可重複地執行操作資料庫的sql語句的集合 返回值上: 儲存過程的返回值,可以有多個值 函式的返回值,只有一個值 函式是可以嵌入在S

oracle呼叫儲存過程函式返回結果集

在程式開發中,常用到返回結果集的儲存過程,這個在MySQL和sql server 裡比較好處理,直接返回查詢結果就可以了,但在Oracle裡面 要 out 出去,就多了一個步驟,對於不熟悉的兄弟們還得出上一頭汗:),這裡我簡單介紹一下,以供參考,   1  定義包      

mysql不用儲存過程函式查詢子節點的方法

sql實現:select id from ( select t1.id, if(find_in_set(parent_id, @pids) > 0, @pids := concat(@pids, ',', id),

Java程式碼執行儲存過程函式

一:先看幾個概念: 首先,自己參考了幾篇文章,寫的很不錯,自己也借鑑一下,然後會在最後貼出自己在專案中使用到的儲存過程,已經實現過程,大家可以做個對比,實現方法不同。http://www.cnblog

Mybits呼叫儲存過程函式返回遊標,parameterType值必須為java.util.Map,由於它會把返回的遊標放在裡面

    <resultMap id="cursorMap" type="com.vcare.model.Photo">         <result column="AD_PIC_ID" property="photoId" jdbcType="INTEGER"/>        

MySQL——呼叫儲存過程函式

1.   呼叫儲存過程    儲存過程是通過  CALL  語向進行呼叫的,語法如下:    CALL  sp_name  ( [  parameter  [ ,  ...  ] ] )    CALL  語句呼叫一個先前用   CREATE  PROCEDURE  建立的儲

MySQL儲存過程自定義函式、Navicat for mysql、建立儲存過程函式呼叫儲存過程函式的區別

與你相遇 好幸運  可我已失去為你淚流滿面的權利  但願在我看不到的天際  你張開了雙翼 1 MySQL儲存過程和函式 過程和函式,它們被編譯後儲存在資料庫中,稱為永續性儲存模組(Persistent Stored Module,PSM),可以反覆呼叫,執行速度快。 1.1 儲存過程 儲存過程是由

Oracle建立儲存過程呼叫過程(一)

1、定義         所謂儲存過程(Stored Procedure),就是一組用於完成特定資料庫功能的SQL語句集,該SQL語句集經過 編譯後儲存在資料庫系統中。在使用時候,使用者通過指定已經定義的儲存過程名字並給出相應的儲存過程引數 來呼叫並執行

Oracle儲存過程函式ISAS的區別

在儲存過程(PROCEDURE)和函式(FUNCTION)中沒有區別; 在檢視(VIEW)中只能用AS不能用IS; 在遊標(CURSOR)中只能用IS不能用AS。 --記住就行了,沒什麼技巧.-_-.

oracle 儲存過程函式呼叫方法

一.儲存過程(PROCEDURE)使用過程, 不僅可以簡化客戶端應用程式的開發和維護,而且可以提高應用程式的執行效能.CREATE [OR REPLACE] PROCUDURE procedure_name(arg1 [model1] datatype1, arg2[mod

oracle 函式呼叫儲存過程

  專案中開發了一個儲存過程來給報表提供資料來源,而程式業務邏輯中需要有一個對該資料來源進行判斷的功能,開始是使用拼接sql的方式在儲存過程中對應sql的外面包裝一層來進行處理,但是覺得這種方式拼接的sql太長,而且以後業務邏輯改變要同時修改儲存過程和程式碼,容易發生遺漏,

Java呼叫儲存過程 -- Mybatis

Java中呼叫儲存過程 -- Mybatis public interface XXXMapper { ​ /* * 1.沒有出參(返回值,void) 返回不了值,返回值都封裝在入參的實體類或Map中(引用型別) * 原因:存過的入參、出參都在java呼叫的入參中

hibernate5 呼叫 oracle 儲存過程函式

@Autowired private SessionFactory sessionFactory; //呼叫無返回值儲存過程 public void callProcNoResult(String name){ String sql="{call test_proc_no_result(?)}"; se

oracle 儲存過程函式呼叫方法

一.儲存過程(PROCEDURE) 使用過程, 不僅可以簡化客戶端應用程式的開發和維護,而且可以提高應用程式的執行效能. CREATE [OR REPLACE] PROCUDURE procedure_name (arg1 [model1] datatype1, arg2[m

SQL Server的CLR程式設計——用.NET為SQL Server編寫儲存過程函式

1、開啟VS2010 新建專案->類庫->AdditionalMD5 2、1.建立類(函式)方法->FunctionMD5    2.建立類(儲存過程)方法->GetMD5 3、然後在SQL SERVER 資料庫中操作 1.目標資料庫例項需要啟

MySQL儲存過程函式的區別與優缺點

為什麼要使用儲存過程和函式 資料庫物件儲存過程和函式,是用來實現一組關於表操作的SQL語句程式碼當做一個整體來執行。一個完整的操作會包含多條SQL語句,在執行過程中需要根據前面的SQL語句來執行結果有選擇的執行後面的SQL語句。 儲存過程和函式可以簡單的理解為一條或多條SQL語句的集合

6.儲存過程函式-mysql

儲存過程和函式是在資料庫中定義一些SQL語句的集合。然後需要哪些功能的時候,直接掉用儲存過程和函式來執行已經定義好了的SQL語句,引入儲存過程和函式可以減少開發人員編寫重複的SQL。 儲存過程和函式是在MYSQL的伺服器中儲存執行的,這個SQL語句是已經編譯過了的,可以減少了客戶端服務端資料傳

(十二)MySQL基礎——儲存過程函式

儲存過程和函式:類似於java中的方法 好處:1、提高程式碼的重用性;2、簡化操作   儲存過程: 1、含義:一組預先編譯好的sql語句的集合,可以理解成批處理語句 2、優點:(1)提高程式碼的重用性(2)簡化操作(3)減少了編譯次數並且減少了和資料庫伺服器的連線次