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.NET與ASP.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不是最直