激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring boot調用Oracle存儲過程的兩種方式及完整代碼

Spring boot調用Oracle存儲過程的兩種方式及完整代碼

2020-08-17 00:07Tiro8183 Java教程

這篇文章主要給大家介紹了關于Spring boot調用Oracle存儲過程的兩種方式及完整代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

因工作需要將公司SSH項目改為Spingboot項目,將項目中部分需要調用存儲過程的部分用entityManagerFactory.unwrap(SessionFactory.class).openSession()來獲取Session實現后發現項目訪問數據庫超過十次就會掛掉,原因是Springboot連接池數量默認為10,猜測是每次訪問數據庫后連接未釋放導致的,手動關閉session后問題解決。

解決問題的過程中又發現了另外兩種調用方式:

  • 直接用EntityManager的createStoredProcedureQuery()方法調用 (推薦)
  • 通過如下方式獲取Session來調用,這種方式不需要手動關閉Session來釋放連接,具體原因我也沒搞明白,有知道的朋友歡迎指點
    Session session = entityManager.unwrap(Session.class);

完整代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package com.hzjd.produre.repository;
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.ParameterMode;
import javax.persistence.PersistenceContext;
import javax.persistence.StoredProcedureQuery;
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.procedure.ProcedureCall;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
 
import com.hzjd.produre.bean.QueryResponse;
import com.hzjd.produre.utils.Assistant;
 
@Repository
public class ProdureDAO {
    public final static String PUBLIC_PAG_SYS_GETNEXTID = "PUBLIC_PAG.SYS_GETNEXTID";
    public final static String PSBC_QUERYBILL = "PSBCPAY.QUERYBILL";
    @PersistenceContext
    EntityManager entityManager;
    @Autowired
    EntityManagerFactory entityManagerFactory;
 
    public Session getSession() {
        return entityManagerFactory.unwrap(SessionFactory.class).openSession();
    }
 
    /**
     * 使用entityManager調用存儲過程
     *
     * @param pay_ID
     * @return
     */
    public QueryResponse queryBill1(String pay_ID) throws Exception {
        QueryResponse queryResponse = new QueryResponse();
        StoredProcedureQuery call = entityManager.createStoredProcedureQuery(PSBC_QUERYBILL);
        call.registerStoredProcedureParameter(1, String.class, ParameterMode.IN).setParameter(1, pay_ID);
        call.registerStoredProcedureParameter(2, String.class, ParameterMode.OUT);
        call.registerStoredProcedureParameter(3, String.class, ParameterMode.OUT);
        call.registerStoredProcedureParameter(4, String.class, ParameterMode.OUT);
        call.registerStoredProcedureParameter(5, String.class, ParameterMode.OUT);
        call.registerStoredProcedureParameter(6, String.class, ParameterMode.OUT);
        call.registerStoredProcedureParameter(7, String.class, ParameterMode.OUT);
        call.registerStoredProcedureParameter(8, String.class, ParameterMode.OUT);
        call.registerStoredProcedureParameter(9, String.class, ParameterMode.OUT);
        call.registerStoredProcedureParameter(10, String.class, ParameterMode.OUT);
        call.execute();
        queryResponse.getBody().setPAY_ID(pay_ID);
        queryResponse.getBody().setCUSTNAME(Assistant.nullToEmpty(call.getOutputParameterValue(2)));
        queryResponse.getBody().setHOME_ADDR(Assistant.nullToEmpty(call.getOutputParameterValue(3)));
        queryResponse.getBody().setTRAN_AMT(Assistant.nullToEmpty(call.getOutputParameterValue(5)));
        queryResponse.getBody().setTOTAL_AMT(Assistant.nullToEmpty(call.getOutputParameterValue(6)));
        queryResponse.getBody().setBALANCE(Assistant.nullToEmpty(call.getOutputParameterValue(8)));
        int errorcode = Assistant.nullToInt(call.getOutputParameterValue(9));
        String errormsg = Assistant.nullToEmpty(call.getOutputParameterValue(10));
        if (errorcode == 0) {
            return queryResponse;
        } else {
            throw new Exception(errormsg);
        }
    }
 
    /**
     * 使用sessionFactory開啟Session調用存儲過程
     *
     * @param pay_ID
     * @return
     */
    public QueryResponse queryBill2(String pay_ID) throws Exception {
        QueryResponse queryResponse = new QueryResponse();
        // 調用完成后需關閉Session否則會出現連接失效
        try (Session session = getSession();) {
            ProcedureCall call = session.createStoredProcedureCall(PSBC_QUERYBILL);
            call.registerParameter(1, String.class, ParameterMode.IN).bindValue(pay_ID);
            call.registerParameter(2, String.class, ParameterMode.OUT);
            call.registerParameter(3, String.class, ParameterMode.OUT);
            call.registerParameter(4, String.class, ParameterMode.OUT);
            call.registerParameter(5, String.class, ParameterMode.OUT);
            call.registerParameter(6, String.class, ParameterMode.OUT);
            call.registerParameter(7, String.class, ParameterMode.OUT);
            call.registerParameter(8, String.class, ParameterMode.OUT);
            call.registerParameter(9, String.class, ParameterMode.OUT);
            call.registerParameter(10, String.class, ParameterMode.OUT);
            queryResponse.getBody().setPAY_ID(pay_ID);
            queryResponse.getBody().setCUSTNAME(Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(2)));
            queryResponse.getBody().setHOME_ADDR(Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(3)));
            queryResponse.getBody().setTRAN_AMT(Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(5)));
            queryResponse.getBody().setTOTAL_AMT(Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(6)));
            queryResponse.getBody().setBALANCE(Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(8)));
            int errorcode = Assistant.nullToInt(call.getOutputs().getOutputParameterValue(9));
            String errormsg = Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(10));
            if (errorcode == 0) {
                return queryResponse;
            } else {
                throw new Exception(errormsg);
            }
        }
    }
 
    /**
     * 使用sessionFactory開啟Session調用存儲過程
     *
     * @param pay_ID
     * @return
     */
    public QueryResponse queryBill3(String pay_ID) throws Exception {
        QueryResponse queryResponse = new QueryResponse();
        Session session = entityManager.unwrap(Session.class);
        ProcedureCall call = session.createStoredProcedureCall(PSBC_QUERYBILL);
        call.registerParameter(1, String.class, ParameterMode.IN).bindValue(pay_ID);
        call.registerParameter(2, String.class, ParameterMode.OUT);
        call.registerParameter(3, String.class, ParameterMode.OUT);
        call.registerParameter(4, String.class, ParameterMode.OUT);
        call.registerParameter(5, String.class, ParameterMode.OUT);
        call.registerParameter(6, String.class, ParameterMode.OUT);
        call.registerParameter(7, String.class, ParameterMode.OUT);
        call.registerParameter(8, String.class, ParameterMode.OUT);
        call.registerParameter(9, String.class, ParameterMode.OUT);
        call.registerParameter(10, String.class, ParameterMode.OUT);
        queryResponse.getBody().setPAY_ID(pay_ID);
        queryResponse.getBody().setCUSTNAME(Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(2)));
        queryResponse.getBody().setHOME_ADDR(Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(3)));
        queryResponse.getBody().setTRAN_AMT(Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(5)));
        queryResponse.getBody().setTOTAL_AMT(Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(6)));
        queryResponse.getBody().setBALANCE(Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(8)));
        int errorcode = Assistant.nullToInt(call.getOutputs().getOutputParameterValue(9));
        String errormsg = Assistant.nullToEmpty(call.getOutputs().getOutputParameterValue(10));
        if (errorcode == 0) {
            return queryResponse;
        } else {
            throw new Exception(errormsg);
        }
    }
}

總結

到此這篇關于Spring boot調用Oracle存儲過程的兩種方式及完整代碼的文章就介紹到這了,更多相關Springboot調用Oracle存儲過程內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/tiro996/p/13485980.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕网址 | 一区二区三区日韩在线观看 | 国产精品一区二区三区在线播放 | 人禽l交免费视频 | 999久久久久久 | 精品国产一区二区三区蜜殿 | 色片免费在线观看 | 双性精h调教灌尿打屁股的文案 | 毛片午夜| 免费网站看v片在线a | 中文字幕在线观看1 | 亚洲一区动漫 | 粉色视频污 | 精品久久久久久久久久久久 | 成人在线视频在线观看 | 日韩在线观看视频一区 | 久久里面有精品 | 热久久成人 | 久久草在线观看视频 | 本站只有精品 | 欧美三日本三级少妇三级99观看视频 | 黄色一级片在线观看 | 国产精品wwww| 日韩中字在线 | 成人做爽爽爽爽免费国产软件 | 双性帝王调教跪撅打屁股 | 精品一区二区三区免费毛片 | 少妇一级淫片免费放4p | www.热| 亚洲成人中文字幕在线 | 黄色片网站在线免费观看 | 一本色道久久综合亚洲精品小说 | 99riav国产在线观看 | 92看片淫黄大片欧美看国产片 | 亚洲第一黄色网 | av在线免费网 | 久久免费视频5 | 毛片视频网站 | 毛片视| xxxxxx性| av在线免费在线观看 |