1. 程式人生 > >ibatis優點與缺點

ibatis優點與缺點

1、  什麼叫ibatis

⑴、概念(官方文件)

  MyBatis是支援普通SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及結果集的檢索。MyBatis使用簡單的XML或註解用於配置和原始對映,將介面和Java的POJOs(PlanOld Java Objects,普通的Java物件)對映成資料庫中的記錄。

   總結:dao層,操作資料庫,提供對sql的封裝,作用跟jdbc,hibernate類似。

2.0版本:ibatis   網址:http://ibatis.apache.org/

時間分隔點:2010/06/16

⑵、特點

  相對Hibernate和Apache OJB 等“一站式”ORM解決方案而言,ibatis 是一種“半 
自動化”的ORM實現。 縱觀目前主流的ORM,無論Hibernate 還是 
Apache OJB,都對資料庫結構提供了較為完整的封裝,提供了從POJO 到資料庫表的全 
套對映機制。程式設計師往往只需定義好了POJO 到資料庫表的對映關係,即可通過Hibernate 或者OJB 提供的方法完成持久層操作。程式設計師甚至不需要對SQL 的熟練掌握,Hibernate/OJB 會根據制定的儲存邏輯,自動生成對應的SQL 並呼叫JDBC 介面加以執 行。 ---- 摘自官方資料的一段話

 總結:ibatis是一種半自動化的ORM, 需要手工編寫sql ;hibernate不需要手工編寫sql。

2、  優點

  ⑴、iBATIS被廣泛認為是最簡單的一種持久化框架。

sql可以寫在xml中,結構清晰,靈活配置。

  ⑵、檔案歸類,select 後的字須定義到標籤中,可以實現部分程式碼複用。

  ⑶、執行sql後,返回的結果集自動封裝。類似以下程式碼,均可省略。

     while (rs.next()) {

                          so = new SoQueryMVO();

                         so.setQryFlag(rs.getString("qryFlag"));//                                                so.setSoNbr(rs.getString("SO_NBR"));

                          so.setExtSoNbr(rs.getString("EXT_SO_NBR"));

                          so.setCoNbr(rs.getString("CO_NBR"));

                          so.setSoStaffName(rs.getString("SO_STAFF_NAME"));

                          so.setSoWorkAreaName(rs.getString("SO_WORK_AREA_NAME"));

                          so.setApplDate(rs.getTimestamp("APPL_DATE"));

                          so.setContactResult(rs.getString("CONTACT_RESULT"));

                          so.setBillType(rs.getString("BILL_TYPE"));

                          so.setPaySts(rs.getString("PAY_STS"));

                          res.add(so);

                   }

  ⑷、MyBatis真正的力量是在對映語句中。這裡是奇蹟發生的地方。對於所有的力量,SQL對映的XML檔案是相當的簡單。當然如果你將它們和對等功能的JDBC程式碼來比較,你會發現對映檔案節省了大約95%的程式碼量。MyBatis的構建就是聚焦於SQL的,使其遠離於普通的方式。

   簡潔的程式碼和簡單的配置使得使用iBATIS所需的程式碼量可以減少到了相應JDBC程式碼的62%

    總結一下:可以省程式碼。

 ⑸、動態sql, 沒覺得有多好。

 ⑹、iBATIS改進了應用的設計方式以確保未來的可維護性,後期可維護性增加。

  ⑺、基於xml的,所以適合多平臺。
iBATIS可以用任何具有完備功能的程式語言來實現。

3、  缺點

⑴、開源的東西,文件資料少,官方說明文件太簡單,真正有應用價值的資訊不多。

  以官方文件為例:60%左右的程式碼講述環境配置,即相當於我們的connection-config.xml配置,及建立一個連結,  對於服務開通來說,使用的是java程式碼,連線oracle庫,一旦配置好環境,對於開發人員來說,專業於某些功能點,業務邏輯、流程、配置等的實現,在以後的開發過程中,其實很少關注環境。

   這部分功能實現可以放到工具類中,對我們來說,文章中的說明沒有什麼大的使用價值。

⑵、實現了結果集自動封裝,一把雙刃劍。

①、返回的結果集封裝結果單一,不能實現靈活封裝。如Map<key=id ,value =vo >

②、不支援巢狀vo物件,如果有同名欄位,會覆蓋。

關聯查詢,需要返回很多資訊,很有可能需要複寫MVO,把巢狀的vo,拿出來,放到第一層的vo裡面。

因為mvo改變,原來jsp頁面上使用soMVO.soResMVO.resId,諸如這種形勢,有可能修改前臺頁面。

③、以查詢為例,入參單一,只有一個入參,如果有兩個以上的引數,必須定義到一個物件中,感覺不靈活。

當然可以用paraMap方式進行配置,麻煩,感覺還不如定義到一個物件中。

④、部分寫在dao中的邏輯,改動起來麻煩。目前的目標是隻修改domIpml類,其它的儘量不修改,現在看來,

如此肯定不行了。部分複雜的邏輯靠標籤無法實現。

  if (!StringUtil.isBlank(so.getChbAccNbr())&& !StringUtil.isBlank(so.getAccNbr())) {

       // 增加批量查詢業務號碼

       isAvaibleCondition = true;

       String tempAccNbr[] = so.getAccNbr().split(";");

       List accNbrList = (List) CollectionFactory

                       .createCollection(CollectionFactory.COLLECTION_LIST);

       for (int i = 0; i < tempAccNbr.length; i++) {

               accNbrList.add(tempAccNbr[i].trim());

       }

       if (accNbrList.size() == 1) {

                sql.append(" AND SO.SO_NBRIN ( ");

                sql.append(" SELECTDISTINCT SO_NBR FROM SO_ACC_NBR where ");

                if(!StringUtil.isBlank(so.getLocalNetId())) {

                        sql.append("  local_net_id=:lcId ");

                       sql.setLong("lcId", so.getLocalNetId());

                        sql.append(" andSTS = 'A' AND ACC_NBR LIKE :accNbr )");

                       sql.setString("accNbr", so.getAccNbr().trim() +"%");

                } else {

                        sql.append(" STS ='A' AND ACC_NBR LIKE :accNbr )");

                       sql.setString("accNbr", so.getAccNbr().trim() +"%");

                }

       } else {

                sql.append(" AND SO.SO_NBRIN ( ");

                sql.append(" SELECTDISTINCT SO_NBR FROM SO_ACC_NBR where ");

                if(!StringUtil.isBlank(so.getLocalNetId())) {

                        sql.append("  local_net_id=:lcId AND STS = 'A' ");

                       sql.setLong("lcId", so.getLocalNetId());

                } else {

                        sql.append(" STS ='A' ");

                }

                int i = 0;

                while (i <accNbrList.size()) {

                        if (i == 0)

                               sql.append(" AND (ACC_NBR = :accNbr");

                        else

                               sql.append(" OR ACC_NBR = :accNbr");

                        sql.append(""+ i + "");

                       sql.setString("accNbr" + i + " ", accNbrList.get(i)+ "");

                        i++;

                }

                sql.append(" ))");

       }

}

⑤、其它

⑶、sql寫在xml, 沒有辦法打斷點,除錯非常不方便,及其浪費時間。

    有可以十幾分鍾寫的一個大sql,完事後,除錯了一天還是編譯性錯誤,完全不誇張,很多可能。

⑷、日誌輸出不完全,可能是我還沒有找到方法。

    無法輸出預編譯賦值之後的sql ,檢視不方便 (原來咱們系統中使用Sql.log實現)

⑸、錯誤資訊提示異樣 ,報錯資訊比較混亂,有些時間沒有參考價值,沒有起到提示作用。

⑹、文件少,現有的文件提供的標籤,也不能完全滿足我們的需求

   如有if 沒有else,形式上感到彆扭,某些

    大小寫是否敏感?

Ibatis適用於小專案,簡單的業務邏輯對映,尤其是單表操作,很方便。

4、  尚未進行驗證的已知功能

  ⑴、分頁查詢

  ⑵、效能問題,介於jdbc,和hibernate之間,理論上也是這樣。

  ⑶、是否有程式碼生成工具,根據xml檔案,或者根據xml生成dao類。


相關推薦

ibatis優點缺點

1、  什麼叫ibatis ⑴、概念(官方文件)   MyBatis是支援普通SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及結果集的檢索。MyBatis使用簡單的XML或註解用於配置和原始對映,將介面和Jav

Server-Side Rendering(服務端渲染)的優點缺點

spa 性能 ide 渲染 額外 優點 一定的 size 壓力 優點 1. SEO 客戶端渲染,頁面中只有初始的幾個html容器,js生成內容填充到容器中,爬蟲只能識別到初始的html容器,js生成的內容一般不會被識別,而服務端渲染直接給出html,爬蟲可以識別到所有內容

HTML5的優點缺點

優點: 網路標準 HTML5本身是由W3C推薦出來的,它的開發是通過谷歌,蘋果,諾基亞,中國移動等幾百家公司一起醞釀的技術,這個技術最大的好處在於它是一個公開的技術。換句話說,每一個公開的標準都可以根據W3C的資料庫找尋根源。另一方面,W3C通過的HTML5標準也就意味著每一個瀏覽器或每一個

go優點缺點

Go語言 Go語言(或稱Golang)是雲端計算時代的C語言。Go語言的誕生是為了讓程式設計師有更高的生產效率,Go語言專門針對多處理器系統應用程式的程式設計進行了優化,使用Go編譯的程式可以媲美C或C++程式碼的速度,而且更加安全、支援並行程序。 開發人員

Python的優點缺點

Python的優點 簡單 Python的語法非常優雅,甚至沒有像其他語言的大括號,分號等特殊符號,代表了一種極簡主義的設計思想。閱讀Python程式像是在讀英語。 易學 Python入手非常快,學習曲線非常低,可以直接通過命令列互動環境來學習Python程式

【mysql 儲存過程】應用儲存過程的優點缺點

總結下使用儲存過程的優缺點 一、儲存過程優點 儲存過程是一組預先建立並用指定的名稱儲存在資料庫伺服器上的 SQL 語句,將使用比較頻繁或者比較複雜的操作,預先用 SQL 語句寫好並存儲起來,以後當需要資料庫提供相同的服務時,只需再次執行該儲存過程。 1.具

各種演算法的優點缺點

1決策樹(Decision Trees)的優缺點 決策樹的優點: 一、           決策樹易於理解和解釋.人們在通過解釋後都有能力去理解決策樹所表達的意義。 二、           對於決策樹,資料的準備往往是簡單或者是不必要的.其他的技術往往要求先把資料一

資料庫索引的優點缺點

索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。 資料庫索引 什麼是索引   資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度。   例如這樣一個查詢:select * from table1 where id=4

Struts1 優點缺點

      Struts開放原始碼框架的建立是為了使開發者在構建基於Java Servlet和JavaServer Pages(JSP)技術的Web應用時更加容易。Struts框架為開放者提供了一個統一的標準框架,通過使用Struts作為基礎,開發者能夠更專注於應用程式的商

什麼是閉包?它的優點缺點是?

閉包:能夠讀取其他函式內部變數的函式。(應用場景:要獲取某函式內部的區域性變數) 閉包的優點:1.能夠讀取函式內部的變數 2.讓這些變數一直存在於記憶體中,不會在呼叫結束後,被垃圾回收機制回收 閉包的

【開發經驗】淺談flutter的優點缺點

本文預設你已經是開發者,並對Flutter有基本的瞭解,但是還未深入使用,希望瞭解Flutter在商業級(而非demo)的專案中的優勢與劣勢。 很多前端開發者應該都尋找過跨平臺的App解決方案,包括沒有同時獨立開發iOS和Android雙端原生app的開發者,應該都

ASP.NETASP.NET MVC 的差異、優點缺點

一個 src 頁面加載 加載 class .net 技術分享 views bubuko 眾所周知,在微軟的編程語言發展歷史中,asp.net是不得不提的一個重要的發展階段,它具有快速開發、層級明確的優點,但最大的缺點,同時也是它逐漸被廢棄的原因就是,頁面加載的viewsta

對建站來說,選擇虛擬主機有哪些優點缺點

虛擬主機 隨著互聯網的發展和進步,主機商在提供多種主機種類的同時,也提供著應有盡有的主機方案,如此一來,站長們就可以有多種選擇。在建站時,站長可以在虛擬主機、VPS主機、雲主機、服務器等主機類型中作出選擇。其中不乏有很多人會選擇虛擬主機,這取決於虛擬主機獨特的優勢。但是事情都有兩面性,虛擬主機也是如此,也

Javascript優點缺點

動態 asc type 函數 nan eof parse java 作用域 優點:   函數是頂級對象   基於原型繼承的動態對象   對象字面量和數組字面量 缺點:   全局變量   作用域   自動插入分號   保留字   Unicode   typeof   pa

響應式布局這件小事有哪些優點缺點該怎麽設計

head 示例 aud 版本 設計師 width con ont ati 響應式布局是Ethan Marcotte在2010年5月份提出的一個概念,簡而言之,就是一個網站能夠兼容多個終端——而不是為每個終端做一個特定的版本。這個概念是為解決移動互聯網瀏覽而誕生的。

版本管理(一)之Git和GitHub的區別(優點缺點

機制 最大 客戶 內核 文件 敏捷 star 一定的 sch Git 簡介 https://www.yiibai.com/git/getting-started-git-basics.html Git 是一個開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的

詳細分析Memcached緩存Mongodb數據庫的優點作用

io瓶頸 緩存 語句 一分鐘 SQ 維護 靈活 出了 友好 http://www.mini188.com/showtopic-1604.aspx 本文詳細講下Memcached和Mongodb一些看法,以及結合應用有什麽好處,希望看到大家的意見和補充。  Memcache

獨立IP虛擬主機有哪些優點缺點

服務器優點一:主機運行速度更快由於獨立IP虛擬主機,在同一個IP段上的網站只有一個,運行速度會更快。優點二:網站不受惡意“牽連”對於做SEO的網站來說,如果同一個IP下有其它網站是非正規網站,那麽你的網站與這樣的網站在同一個IP下,會受惡意“牽連”。而獨立IP虛擬主機就不會有這種情況發生。優點三:對搜索引擎更

博客建站之disucz論壇程序的優點缺點分析[圖]

www 可靠 優點 分享圖片 需要 們的 一個 圖片 內容 我一直對寫博客的人非常佩服,因為寫博客是個需要長期堅持的過程,可能是十年深知一輩子,這些人起碼具有強大的意誌力,而且他們的文字功底也都不錯,這些是我們普通人難以做到的,因此我也想學習一下他們的這種精神,讓自己變得有

流行的9個Java框架介紹: 優點缺點等等

優先 項目需求 ans ati asr 依賴註入 json插件 之前 聚合 流行的9個Java框架介紹: 優點、缺點等等   在 2018年,Java仍然是世界上最流行的編程語言。它擁有一個巨大的生態系統,在全世界有超過900萬Java開發人員。雖然Java不是最直