国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产麻豆乱码精品一区二区三区 | 欧美视频在线免费 | 亚洲不卡在线观看 | 日韩电影免费在线观看中文字幕 | 精品成人在线视频 | 欧美一区二区三区黄 | www中文字幕 | 9999热视频| 久久久久久九九九 | 黄色一级毛片在线观看 | 黄毛片视频| 久免费视频 | a国产精品 | 色伊人| 一级中文字幕 | 亚洲免费国产视频 | 国产色 | 国产精品伦理一区二区 | 亚洲狠狠爱一区二区三区 | 免费看毛片的网站 | 久久伦理电影网 | 亚洲精品久久久一区二区三区 | 亚洲国产一区二区三区四区 | 成年人免费观看网站 | 国产福利在线 | 免费成人福利视频 | 夜夜摸夜夜操 | 久久久成人网 | 99精品国产一区二区三区 | 色婷婷综合久久久中文字幕 | 黄色电影免费在线观看 | 国产欧美日韩在线观看 | 欧美久久久久 | 欧美视频区| 一区二区三区精品视频 | 精品无码久久久久国产 | 99热在线精品免费 | 婷婷激情五月 | 97热在线观看 | 欧美精品一区二区三区在线 | 亚洲精品一区二区在线 |