MyBatis 源码解读(零)导语
簡單介紹下我使用最多的持久層框架 Hibernate valuelist MyBatis 這三個框架,也是用過國內的一些產品,不過已經很少了。
雖然已經使用了很長時間,但是還沒有認真的讀過該項目的源碼,不讀一下總感覺有點遺憾,為此寫出了該系列的博文,能力有限,不足或紕漏之處希望讀者指正。
以下是對我常用的持久層框架的簡單對比,不喜歡的可以忽略以下內容
Hibernate
Hibernate 是我最早使用,曾經也是我十分熱愛的框架 :
首先說這個框架的主旨思想是要從開發人員的思維中把表這一概念隱去,只保留對象的概念。到現在我還一直認為這是一個非常先進的理念,這樣有一個非常明顯的好處,就是可以讓開發人員更專注于業務,不考慮與數據庫交互的過程。
但是就是她的思想太先進了,實際上到目前為止,與數據的交互一直是一個瓶頸,無論怎么做都不能實現幾乎無延遲的數據檢索與寫入,Hibernate要做到好用就必須與數據產生大量的交互,截止到現在我們在數據存儲和檢索方面還做不到接近于無感知,而且可以斷定在將來相當長的一段時間內也不太可能做得到。
要解決這一問題就必須使用手寫SQL 一旦使用手寫SQL,這就已經不是 Hibernate的優勢了,Hibernate 手寫SQL時還是相當的繁瑣的,而且不方便修改,這對開發人員來說是很不友好的事情。
MyBatis
我使用最多, 也是目前為止我最喜歡的一個框架,原因就是他實用,方便快捷。使用MyBatis時通常我們需要定義一個Mapper 每一個Mapper對應一個相應的 xml 文件,由框架處理 JAVA 代碼與 XML 文件之間的聯系,這樣激活就可以實現JAVA代碼和SQL開發的獨立執行,調試SQL再也看不見煩人的 “” 和字符串拼接了。
下面是一個Mapper的示例文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.pos.mapper.PosMapper" ><select id="findByAgentNo" resultType="com.pos.entity.Agent">selecta.id id,a.agent_no agentNo,a.short_name shortName,a.full_name fullName,a.sales sales,a.status status,sale.staff_no ,sale.staff_name ,a.role_type roleType,a.create_time createTimefrom user aleft join staff sale on a.sales = sale.staff_nowhere a.agent_no = #{agentNo}</select> </mapper>從以上的代碼中可以看出,除了標簽之外,幾乎完整的保留了一個完整的SQL格式,可以直接在SQL編輯器中進行調試SQL,十分方便。
valuelist
valuelist ,這個框架可能對很多人來說比較陌生,不做過多介紹了,簡單和 MyBatis對比一下
| SQL編寫 | 簡單,可在SQL編輯器中直接使用 | 簡單,可在SQL編輯器中直接使用 |
| SQL調用 | 簡單,對應的命名空間即為對應的JAVA類,通過正常的工具即可進行大量的代碼提示不需要硬性記憶 | 麻煩,調用時必須明確的知道自己調用的SQLkey值是多少,這個是不能通過開發工具進行提示的 |
| 數據庫記錄與對象的映射 | 框架完成,非常方便快捷 | 需要自己進行手工適配 |
| 分頁操作 | 不提供默認分頁功能,需要自己書寫相關代碼或者使用插件 | 默認帶有分頁功能,分頁比較方便 |
| SQL查找方便程度 | 方便,通常我們的文件名稱與對應的類名一致,文件為xml格式,通過命名空間進行隔離 | 從JAVA查找SQL方便,在合理規范名稱下,可方便查找對應的文件中的SQL;在逆向進行查找的時候很不方便,不能很快的鎖定調用關系 |
通過對比可以發現只有在需要分頁時valuelist 稍微占優,但是MyBatis的生態中已經存在很好使用分頁插件,引入后只需要簡單的幾行代碼便可實現一個非常優秀的分頁功能。我使用的是 PageHelper,你可以在Github 獲取相關信息引入項目使用。
總結
以上是生活随笔為你收集整理的MyBatis 源码解读(零)导语的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Deepin笔记本WIFI速度过慢问题
- 下一篇: C2-关于VCF文件合并的几种方法