日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

spring+springMvc+mybatis 调用oracle 存储过程

發(fā)布時(shí)間:2023/12/9 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring+springMvc+mybatis 调用oracle 存储过程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

   最近在項(xiàng)目中遇到在mybatis中調(diào)用oracle存儲(chǔ)過(guò)程的問(wèn)題,網(wǎng)上各種查詢,最終解決了問(wèn)題,在我們項(xiàng)目中我只需要oracle 的存儲(chǔ)過(guò)程返回一個(gè)字符串用來(lái)存入數(shù)據(jù)庫(kù)作為表數(shù)據(jù)的主鍵,

接下來(lái)整理代碼:

  ?首先構(gòu)建存儲(chǔ)過(guò)程getSequence,一個(gè)輸入,輸出參數(shù)。

省略數(shù)據(jù)庫(kù)表的創(chuàng)建。

?create or replace?

procedure getSequence(tableName in varchar2, outId out varchar2)
is

PRAGMA AUTONOMOUS_TRANSACTION; --自治事務(wù)?

ls_year varchar2(4); --年度
ls_month varchar2(2); --月度
ls_day varchar2(2); --日

--自治事務(wù): 防止外層事務(wù)調(diào)用內(nèi)層事務(wù)時(shí)被內(nèi)層事務(wù)中的commit提交了不該提交的內(nèi)容?
--version: 2.0

begin
ld_date := sysdate;
ls_table := lower(as_table_code);
ls_year := To_char(ld_date, 'yyyy' );
ls_month := To_char(ld_date, 'mm' );
ls_day := To_char(ld_date, 'dd' );
select nvl(max(sequence_value),0)
into ld_value
from sm_sequence
where sequence_code = ls_table ;

If ld_value = 0 then

ld_value := 1;
insert into sm_sequence
(sequence_code,
sequence_year,
sequence_month,
sequence_day,
sequence_value )
values
(ls_table,
to_char( sysdate, 'yyyy' ),
to_char( sysdate, 'mm' ),
to_char( sysdate, 'dd' ),
ld_value );

else
select sequence_year, sequence_month, sequence_day, sequence_value
into ln_year, ln_month, ln_day, ld_value
from sm_sequence
where sequence_code = ls_table;
if ln_year <> to_number(to_char(sysdate, 'yyyy')) or
ln_month <> to_number(to_char(sysdate, 'mm')) or
ln_day <> to_number(to_char(sysdate, 'dd')) then
ld_value := 1;
else
ld_value := ld_value + 1;
end if;
update sm_sequence
set sequence_value = ld_value,
sequence_year = ls_year,
sequence_month = ls_month,
sequence_day = ls_day
where sequence_code = ls_table ;

End If;
commit;
as_id := ls_year ||ls_month||ls_day||ltrim(to_char(ld_value, '00000000' ));
end ;

函數(shù)構(gòu)建完成;

在pl/sql 中調(diào)用:

?

SQL> set serveroutput on
SQL> DECLARE
2 tableName varchar2(20);
3 row_id varchar2(10);
4 BEGIN
5 getSequence(tableName,row_id);
6
7 dbms_output.put_line(row_id); 8 END;
9 /
ename

?

?

在Spring+springMVC+myBatis項(xiàng)目中調(diào)用,

java調(diào)用:

dao層:  

  public interface?getMapper(){

    public void getSequence(HashMap<String,Object> params);

   }

mybatis 層xml 配置:

<parameterMap type="java.util.Map" id="getUserCountMap">
<parameter property="tableName" mode="IN" jdbcType="VARCHAR"/>
<parameter property="rowId" mode="OUT" jdbcType="VARCHAR"/>
</parameterMap>
<select id="getSequence" statementType="CALLABLE"
parameterMap="getUserCountMap" >
{call getSequence?(?,?)}
</select>

service層調(diào)用:

HashMap<String,Object> param =new HashMap<String,Map>();

param.put("tableName","表名");

getMapper.getSequence(param);//此處特別注意調(diào)用時(shí)不需要返回類型,一旦執(zhí)行完存儲(chǔ)過(guò)程map中就已經(jīng)存在值

System.out.print(param.get("rowId"));

以上是這次項(xiàng)目開發(fā)中遇到的問(wèn)題,另外spring+springMVC+mybatis調(diào)用oracle存儲(chǔ)過(guò)程返回多條數(shù)據(jù)的還在研究中,先整理這么多

?

轉(zhuǎn)載于:https://www.cnblogs.com/zhencode666/p/6063536.html

總結(jié)

以上是生活随笔為你收集整理的spring+springMvc+mybatis 调用oracle 存储过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。