springMVC + oracle預存程序 構建高效能靈活易維護的java web架構

來源:互聯網
上載者:User

標籤:

MVC讓簡單的業務也變得複雜

不知道你在使用MVC模式開發項目的時候是否覺得很麻煩,一個簡單的增刪改查動作卻要涉及到多個檔案操作。

以一條資料增加為例說明。

假設我們使用hibernate並且dao層是已經封裝好的

可以看出如果我們在系統中寫一個增加功能需要自己動手寫的地方至少是 jsp , action , service,servicesImpl 四層。

如果是複雜的添加操作那麼我們很可能還會自己定義dao層的介面和方法,那樣就是6層操作了。

如果使用mybatis 至少也是寫4層,常見的情況也是寫6層,因為我們需要自己寫一些sql語句,

這樣就要寫mapper.xml 和mapper.java 因此因為是6層。

一個簡單的動作寫4層或者6層我總覺得是那麼麻煩的一件事情,而且容易出錯。

如果有一天這個新增動作需要添加一個欄位,那麼放在誰的目前都是一個蛋疼的動作了,添加一個欄位足以讓你噁心半天了。

我們來看看要修改多少地方

1、資料庫

2、pojo

3、dao的設定檔

4、介面

可能還要修改action等其他地方。而且設定檔一動很容易出現bug。。。

哎總之我受夠了這樣的日子咯。。。。。 

 

 

兩層精簡架構

後來進入湖南比聯科技後再公司架構的啟發下我改造了一個使用springMvc 和 oracle預存程序實現web架構的2層結構,從此福音到了

先看一個簡化的流程圖吧

 

我們把所有的商務邏輯通過oracle的過程來實現,然後只需要在頁面調用我們寫好的JavaScript庫就可以直接拿到過程處理的結果。

所以大部分的業務我們都只要2處理2個地方就可以了,先寫過程在寫介面調用。是不是很方便呢?而且過程處理的資料比mvc可是快很多哦,

至於介面顯示方面也是,html介面的讀取速度遠遠大於jsp頁面,所以效能方面是一個極大的提高。

還有我們這裡沒有了pojo 所以如果修改欄位,也不需要改動任何東西,改一下預存程序和頁面就好了工作量比MVC中少了一倍。也就是說工作效率提高了2倍哦。

 

原理就是圖上所表示的下面用代碼來說明一下(以一個功能管理為例子):

 

資料庫表 
-- Create tablecreate table EX_SYS_POWER(  ID            INTEGER not null,  ICON_PATH     VARCHAR2(500),  FUNCTION_PATH VARCHAR2(1000),  MARK          VARCHAR2(4000),  STATE         INTEGER,  GRADE         INTEGER,  PARENT_ID     INTEGER,  YXBZ          INTEGER,  NAME          VARCHAR2(500))

  

預存程序

 

CREATE OR REPLACE PACKAGE BODY A_ES_POWER IS    --=============根據id查詢  PROCEDURE FIND_POWER_BYID(P_ID     INTEGER,                            P_RESULT OUT PLAT_CONSTANT.RESULTSET) IS  BEGIN    OPEN P_RESULT FOR      SELECT *        FROM EX_SYS_POWER       WHERE ID = P_ID         AND YXBZ = 1;    END;END;

  

html介面
<!DOCTYPE HTML><html><head><script type="text/javascript" src="../../public/hui/lib/jquery/1.9.1/jquery.min.js" ></script><script type="text/javascript" src="../../public/exctscript/AjaxProxy.js" ></script><title>空白頁</title></head><body>   <a onclick="test()" href="javascript:void(0);" class=‘btn btn-success‘ >測試查詢</a>   <a onclick="test2()" href="javascript:void(0);" >欄位測試</a><script type="text/javascript">function test(){var loj=new AjaxProxy();loj.addParm(1, "1");loj.invoke("SCOTT.A_ES_POWER.FIND_POWER_BYID", function(result){         alert(loj.getString("P_RESULT",1,"ICON_PATH"));         alert(loj.getRowCount("P_RESULT")); }); } </script> </body></html>

  Ajaxprox.js 

/** * author :薑友瑤 */function getRootPath() {var curWwwPath = window.document.location.href;var pathName = window.document.location.pathname;return curWwwPath.substring(0, curWwwPath.indexOf(pathName))+ pathName.substring(0, pathName.substr(1).indexOf(‘/‘) + 1);}var basePath = getRootPath();document.write(‘<script type="text/javascript" src="‘ + basePath+ ‘/public/hui/lib/layer/1.9.3/layer.js"  ></script>‘);function AjaxProxy(async) {if (async != null) {this.async = async;} else {this.async = true;}this.gs_parameter = {};this.STATE_SUCCESS = ‘1‘;this.STATE_ERR = ‘0‘;this.result = null;}AjaxProxy.prototype.invoke = function(procedure, callback) {var url = basePath + "/center.do?p_id=" + procedure;var $this = this;layer.msg(‘載入中‘, {icon : 16});if (this.async) {//非同步$.ajax({type : "post",url : url,data : this.gs_parameter,async : true,success : function(callbackData) {var result = eval(callbackData);if (result.requestStatus == 0) {layer.closeAll(‘dialog‘);layer.msg(result.errMsg, {icon : 2});return;} else {$this.result = result;layer.closeAll(‘dialog‘);callback();}}});} else { //  同步$.ajax({type : "post",url : url,data : this.gs_parameter,async : false,success : function(callbackData) {var result = eval(callbackData);if (result.requestStatus == 0) {layer.closeAll(‘dialog‘);layer.msg(result.errMsg, {icon : 2});return;} else {$this.result = result;layer.closeAll(‘dialog‘);callback();}}});}};AjaxProxy.prototype.addParm = function(index, value) {if (value != null) {value += "";value = encodeURIComponent(value);this.gs_parameter["param_" + index] = value;}};AjaxProxy.prototype.getRowCount = function(mapName) {return eval("this.result." + mapName + "[‘row_count‘]");};AjaxProxy.prototype.getValue = function(key) {return eval("this.result." + key);};AjaxProxy.prototype.getString = function(mapName, index, key) {return eval("this.result." + mapName + ".row_value[" + index + "][‘" + key+ "‘]");};

這就是前台處理的部分了,後台部分就直接去我的百度雲下載吧

連結: http://pan.baidu.com/s/1eQuHwBK 密碼: jmpk

程式中都有注釋大家可以一起參考參考,有bug的地方可以告訴我啊,我在改進改進。

 

  

 

springMVC + oracle預存程序 構建高效能靈活易維護的java web架構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.