mybatis存儲過程
㈠ 什麼是mybatis 為什麼要使用my batis
1、定義
MyBatis是一個支持普通sql查詢,存儲過程和高級映射的優秀持久層框架。
2、使用原因
MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始映射,將介面和java的POJO(Plain Old Java Objects,普通的Java對象)映射成資料庫中的記錄。
3、總體流程
(1)載入配置並初始化
觸發條件:載入配置文件
處理過程:將SQL的配置信息載入成為一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。
(2)接收調用請求
觸發條件:調用Mybatis提供的API
傳入參數:為SQL的ID和傳入參數對象
處理過程:將請求傳遞給下層的請求處理層進行處理。
(3)處理操作請求
觸發條件:API介面層傳遞請求過來
傳入參數:為SQL的ID和傳入參數對象
處理過程:
(A)根據SQL的ID查找對應的MappedStatement對象。
(B)根據傳入參數對象解析MappedStatement對象,得到最終要執行的SQL和執行傳入參數。
(C)獲取資料庫連接,根據得到的最終SQL語句和執行傳入參數到資料庫執行,並得到執行結果。
(D)根據MappedStatement對象中的結果映射配置對得到的執行結果進行轉換處理,並得到最終的處理結果。
(E)釋放連接資源。
(4)返回處理結果將最終的處理結果返回。
㈡ MyBatis怎麼調用PostgreSQL存儲過程
1.調用沒有OUT參數的存儲過程:
創建存儲過程:
create
or
replace
function
get_code(a1
varchar(32))
returns
varchar(32)
as
$$
declare
the_result
varchar(32);
begin
the_result
:=
name
from
t_project
where
id
=
a1;
return
the_result;
end;
$$
language
plpgsql;
sqlMap配置文件:
<select
id="f1"
resultType="String"
parameterType="map"
statementType="CALLABLE"
useCache="false">
<![CDATA[
select
get_code(
#{a1,mode=IN,jdbcType=VARCHAR}
)
]]>
</select>
註:不使用OUT參數的存儲過程可以直接用
select
程序:
public
String
generateCode(String
a1)
{
Map<String,String>
paramMap
=
new
HashMap<String,String>();
paramMap.put("a1",
a1);
SqlSession
sqlSession
=
getSqlSession();
String
result
=
sqlSession.selectOne("f1",
paramMap);
return
result;
}
2.使用OUT參數的存儲過程:
創建存儲過程:
create
or
replace
function
testproc(a1
varchar(32),out
a2
varchar(32),out
a3
varchar(32))
as
$$
declare
begin
select
id
into
a2
from
t_project
where
id=a1;
select
name
into
a3
from
t_project
where
id=a1;
return;
end;
$$
language
plpgsql;
sqlMap配置文件:
<select
id="generateCode1"
parameterType="map"
statementType="CALLABLE"
useCache="false">
{
call
testproc(
#{a1,mode=IN,jdbcType=VARCHAR},
#{a2,mode=OUT,jdbcType=VARCHAR},
#{a3,mode=OUT,jdbcType=VARCHAR}
)
}
</select>
程序:
public
Map
generateCode1(String
a1)
{
Map<String,String>
paramMap
=
new
HashMap<String,String>();
paramMap.put("a1",
k1);
SqlSession
sqlSession
=
getSqlSession();
sqlSession.selectOne("generateCode1",
paramMap);
return
paramMap;
}
帶輸出參數的存儲過程,sqlSession.selectOne("generateCode1",
paramMap);
將paramMap傳入之後mybatis調用存儲過程,將paramMap進行填充
paramMap最後的值:{a1=R20148800900,
a2=R20148800900,
a3=項目名稱}
㈢ Java框架MyBatis工作流程是怎樣的
一、Mybatis介紹
MyBatis是一款一流的支持自定義SQL、存儲過程和高級映射的持久化框架。MyBatis幾乎消除了所有的JDBC代碼,也基本不需要手工去 設置參數和獲取檢索結果。MyBatis能夠使用簡單的XML格式或者註解進行來配置,能夠映射基本數據元素、Map介面和POJOs(普通java對 象)到資料庫中的記錄。
二、MyBatis工作流程
(1)載入配置並初始化
觸發條件:載入配置文件
配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,將SQL的配置信息載入成為一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。
(2)接收調用請求
觸發條件:調用Mybatis提供的API
傳入參數:為SQL的ID和傳入參數對象
處理過程:將請求傳遞給下層的請求處理層進行處理。
(3)處理操作請求 觸發條件:API介面層傳遞請求過來
傳入參數:為SQL的ID和傳入參數對象
處理過程:
(A)根據SQL的ID查找對應的MappedStatement對象。
(B)根據傳入參數對象解析MappedStatement對象,得到最終要執行的SQL和執行傳入參數。
(C)獲取資料庫連接,根據得到的最終SQL語句和執行傳入參數到資料庫執行,並得到執行結果。
(D)根據MappedStatement對象中的結果映射配置對得到的執行結果進行轉換處理,並得到最終的處理結果。
(E)釋放連接資源。
(4)返回處理結果將最終的處理結果返回。
orm工具的基本思想
無論是用過的hibernate,mybatis,你都可以法相他們有一個共同點:
從配置文件(通常是XML配置文件中)得到 sessionfactory.
由sessionfactory 產生 session
在session 中完成對數據的增刪改查和事務提交等.
在用完之後關閉session 。
在java 對象和 資料庫之間有做mapping 的配置文件,也通常是xml 文件。
功能架構
㈣ mybatise怎樣調用存儲過程
如何使用Myts調用資料庫中的存儲過程,下面以Oracle資料庫的為例: 1.在資料庫中創建以下的存儲過程: 2.編寫SQL映射文件WxclDAO.xml: 其中statementType="CALLABLE"表示要調用存儲過程,parameterType參數類型; jdbcType對應資料庫中的...
㈤ MyBatis怎麼調用PostgreSQL存儲過程
1.調用沒有OUT參數的存儲過程:
創建存儲過程:
create or replace function get_code(a1 varchar(32)) returns varchar(32) as $$
declare the_result varchar(32);
begin
the_result := name from t_project where id = a1;
return the_result;
end;
$$
language plpgsql;
sqlMap配置文件:
<select id="f1" resultType="String" parameterType="map" statementType="CALLABLE" useCache="false">
<![CDATA[
select get_code(
#{a1,mode=IN,jdbcType=VARCHAR}
)
]]>
</select>
註:不使用OUT參數的存儲過程可以直接用 select
程序:
public String generateCode(String a1) {
Map<String,String> paramMap = new HashMap<String,String>();
paramMap.put("a1", a1);
SqlSession sqlSession = getSqlSession();
String result = sqlSession.selectOne("f1", paramMap);
return result;
}
2.使用OUT參數的存儲過程:
創建存儲過程:
create or replace function testproc(a1 varchar(32),out a2 varchar(32),out a3 varchar(32)) as $$
declare
begin
select id into a2 from t_project where id=a1;
select name into a3 from t_project where id=a1;
return;
end;
$$
language plpgsql;
sqlMap配置文件:
<select id="generateCode1" parameterType="map" statementType="CALLABLE" useCache="false">
{
call testproc(
#{a1,mode=IN,jdbcType=VARCHAR},
#{a2,mode=OUT,jdbcType=VARCHAR},
#{a3,mode=OUT,jdbcType=VARCHAR}
)
}
</select>
程序:
public Map generateCode1(String a1) {
Map<String,String> paramMap = new HashMap<String,String>();
paramMap.put("a1", k1);
SqlSession sqlSession = getSqlSession();
sqlSession.selectOne("generateCode1", paramMap);
return paramMap;
}
帶輸出參數的存儲過程,sqlSession.selectOne("generateCode1", paramMap);
將paramMap傳入之後mybatis調用存儲過程,將paramMap進行填充
paramMap最後的值:{a1=R20148800900, a2=R20148800900, a3=項目名稱}
㈥ mybatis為什麼調用不了存儲過程
1、 sqlserver oracle sqlserver返回結果集是可以不要out參數的。如果sql中用的是select出結果,不需要配置out參數。多個結果集/結果集可以配置resultMap 來返回LIST,主要是調用selectList方法會自動把結果集加入到list中去的。
2 、sql有返回值 用select標簽 。
3 、注意sql參數和mybatis參數的對應關系,這個這里就不講了。
4、 注意參數個數 。
㈦ mybatis調用mysql存儲過程(返回參數,單結果集,多結果集)
mybatis調用mysql存儲過程(返回參數,單結果集,多結果集)
註: RETCODE、RETDESC 這里的輸出值不用在函數里 SELECT RETCODE; ,因為即使沒有,當執行成功後會自動返回在對象里(Object/Map),所以在函數里不用SELECT一下了。
Navicat中執行函數需要輸入參數值,也是對應圖1,@A@B表示輸出值。(一個輸入值兩個輸出值)
1. 標注一二三四五處如果存在,則執行成功後返回結果如下
標注一對應結果1
標注二對應結果2
標注三對應結果3
標注四對應結果4
標注五對應結果5
其中結果3返回的是集合。
存在這么多結果,想要取結果3中的集合是不好取的,只有像下圖一樣只有一個結果才好取出集合。
2. 標注一二四五處如果不存在,則執行成功後返回結果如下
只有結果1,對應的是標注三處的值。可以取出集合
函數p_plicate_enroll
㈧ mybatis工作原理及為什麼要用
一、mybatis的工作原理:
MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。
MyBatis使用簡單的 XML或註解用於配置和原始映射,將介面和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java對象)映射成資料庫中的記錄。
每個MyBatis應用程序主要都是使用SqlSessionFactory實例的,一個SqlSessionFactory實例可以通過SqlSessionFactoryBuilder獲得。用xml文件構建SqlSessionFactory實例是非常簡單的事情。
推薦在這個配置中使用類路徑資源,但可以使用任何Reader實例,包括用文件路徑或file://開頭的url創建的實例。MyBatis有一個實用類----Resources,它有很多方法,可以方便地從類路徑及其它位置載入資源。
二、使用mybatis的原因:因為mybatis具有許多的優點,具體如下:
1、簡單易學:本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件易於學習,易於使用,通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現。
2、靈活:mybatis不會對應用程序或者資料庫的現有設計強加任何影響。 sql寫在xml里,便於統一管理和優化。通過sql語句可以滿足操作資料庫的所有需求。
3、解除sql與程序代碼的耦合:通過提供DAO層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提高了可維護性。
4、提供映射標簽,支持對象與資料庫的orm欄位關系映射。
5、提供對象關系映射標簽,支持對象關系組建維護。
6、提供xml標簽,支持編寫動態sql。
(8)mybatis存儲過程擴展閱讀:
mybatis的功能構架:
1、API介面層:提供給外部使用的介面API,開發人員通過這些本地API來操縱資料庫。介面層一接收到調用請求就會調用數據處理層來完成具體的數據處理。
2、數據處理層:負責具體的SQL查找、SQL解析、SQL執行和執行結果映射處理等。它主要的目的是根據調用的請求完成一次資料庫操作。
3、基礎支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置載入和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎的組件。為上層的數據處理層提供最基礎的支撐。