1. 程式人生 > >Mybatis部分 個人總結

Mybatis部分 個人總結

Mybatis部分;
一、JDBC程式設計有哪些不足之處:Mybatis是如何解決這些問題的?
1.資料庫連結建立、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用資料庫連線池可以解決此問題
解決:在SqlMapConfig.xml中配置資料庫連線池,使用連線池管理資料庫連結
2.Sql語句寫在程式碼中,造成程式碼的不易維護,實際應用中Sql變化的可能較大,Sql變動需要改變Java原始碼
解決:將Sql語句配置在XXXMapper.xml檔案中,與java程式碼分離
3.向Sql語句傳引數麻煩,因為sql語句的where條件不一定,可能多也可能少,佔位符需要和引數一一對應
解決:Mybatis自動將java物件對映至sql語句
4.對結果集解析麻煩,sql變化導致解析程式碼變化,且解析前需要遍歷,如果能將資料庫記錄封裝成pojo物件解析比較方便
解決:Mybatis自動將sql執行結果對映至java物件。

二、Mybatis程式設計步驟是什麼樣的?
1.建立SqlSessionFactory
2.通過SqlSessionFactory建立SqlSession
3.通過SqlSession執行資料庫操作
4.呼叫session.commit()提交事務
5.呼叫session.close()關閉會話

三、Mybatis與Hibernate有哪些不同?
Mybatis和Hibernate不同,他不完全是一個ORM框架,因為Mybatis需要程式設計師自己編寫Sql語句,不過Mybatis可以通過XML或註解方式靈活配置要執行的sql語句,
並將java物件和sql語句對映生成最終執行的sql,最後將sql執行的結果再對映生成java物件

Mybatis學習門檻低,簡單易學,程式設計師直接編寫原生態sql,可嚴格控制sql執行效能,靈活度高,非常適合對關係資料模型要求不高的軟體開發,例如:網際網路軟體、企業運營類軟體等,
因為這類軟體需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是Mybatis無法做到資料庫無關性,如果需要實現支援多種資料庫的軟體則需要自定義多套sql對映檔案,工作量大

Hibernate物件/關係對映能力強,資料庫無關性好,對於關係模型要求高的軟體(例如需求固定的定製化軟體)如果用hibernate開發可以節省很多程式碼,提高效率。
但是Hibernate的缺點是學習門檻高,要精通門檻更高,而且怎麼設計O/R對映,在效能和物件模型之間如何權衡,以及怎樣用好Hibernate需要具有很強的經驗和能力
總之,按照使用者的需求在有限的資源環境下只要能做出維護性、擴充套件性良好的軟體架構都是好架構,所以框架只有適合才是最好

四、使用Mybatis的mapper介面呼叫時有哪些要求?
1.mapper介面方法名和mapper.xml中定義的每個sql的id相同
2.mapper介面方法的輸入引數型別和mapper.xml中定義的每個sql的parameterType的型別相同
3.mapper介面方法的輸出引數型別和mapper.xml中定義的每個sql的resultType的型別相同
4.mapper.xml檔案中的namespace即是mapper介面的類路徑。

五、SqlMapConfig.xml中配置有哪些內容?
SqlMapConfig.xml中配置的內容和順序如下:
    properties(屬性)
    settings(配置)
    typeAliases(類型別名)
    typeHandlers(型別處理器)
    objectFactory(物件工廠)
    plugins(外掛)
    environments(環境集合屬性物件)
    environment(環境子屬性物件)
    transactionManager(事務管理)
    dataSource(資料來源)
    mappers(對映器)

六、簡單的說一下Mybatis的一級快取和二級快取?
Mybatis首先去快取中查詢結果集,如果沒有則查詢資料庫,如果有則從快取取出返回結果集就不走資料庫。Mybatis內部儲存快取使用HashMap,key為HashCode+sqlId+Sql語句。
value為從查詢出來對映生成的java物件
Mybatis的二級快取即查詢快取,它的作用域是一個mapper的namespace,即在同一個namespace中查詢sql可以從快取中獲取資料。二級快取是可以跨SqlSession的

七、Mapper編寫有哪幾種方式?
1.介面實現類繼承SqlSessionDaoSupport
使用此種方法需要編寫mapper介面,mapper介面實現類、mapper.xml檔案
(1)在SqlMapConfig.xml中配置mapper.xml的位置
<mappers>
    <mapper resource = "mapper.xml檔案的地址">
    <mapper resource = "mapper.xml檔案的地址">
</mappers>
(2)定義mapper介面
(3)實現類整合SqlSessionDaoSupport
mapper方法中可以this.getSqlSession()進行資料增刪改查
(4)spring配置
<bean id="" class="mapper介面的實現">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
2.使用org.mybatis.spring.mapper.MapperFactoryBean
(1)在SqlMapConfig.xml中配置mapper.xml的位置
如果Mapper.xml和mapper介面的名稱相同且在同一個目錄,這裡可以不用配置
<mappers>
    <mapper resource="mapper.xml檔案的地址">
    <mapper resource="mapper.xml檔案的地址">
</mappers>
(2)定義mapper介面
注意
(1)mapper.xml中的namespace為mapper介面的地址
(2)mapper介面中的方法名和mapper.xml中的定義的statement的id保持一致
(3)Spring中定義
<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="mapper介面地址">
    <property name="sqlSessionFactory" ref="sqlSessionFactory">
</bean>
3.使用mapper掃描器
(1)mapper.xml檔案編寫
注意:
mapper.xml中的namespace為mapper介面的地址
mapper介面中的方法名和mapper.xml中的定義的statement的id保持一致
如果將mapper.xml和mapper介面的名稱保持一致則不用再SqlMapConfig.xml中進行配置

(2)定義mapper介面
注意mapper.xml的檔名和mapper的介面名稱保持一致,且放在同一個目錄
(3)配置mapper掃描器
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="mapper介面包地址"></property>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory">
</bean>
4.使用掃描器後從spring容器中獲取mapper的實現物件
掃描器將介面通過代理方法生成實現物件,要spring容器中自動註冊,名稱為mapper介面的名稱

相關推薦

Mybatis部分 個人總結

Mybatis部分; 一、JDBC程式設計有哪些不足之處:Mybatis是如何解決這些問題的? 1.資料庫連結建立、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用資料庫連線池可以解決此問題 解決:在SqlMapConfig.xml中配置資料庫連線池,使用連線池管理資料庫

linux部分個人總結命令

絕對路徑用"/"表示 檢視當前程序:ps ps -ef|grep pid:檢視指定程序的資訊 終止程序:kill-9 pid 執行退出:exit 檢視當前路徑:pwd 怎麼清屏:clean 退出當前命令:ctrl+c 執行睡眠:ctrl+z 掛起當前程序:fg ls列出指定目錄 l

關於NRF24L01模組使用的部分個人總結

1.首先,NRF24L01是一個基於2.4GHZ的射頻模組,增強型的具有更好的穩定性。 2.NRF使用的是SPI協議來進行操作,所以,需要理解SPI的幾個輸入輸出口,再加以正確的時序操作,即可以操作N

mybatis觀看視訊個人總結

這是看的 尚矽谷黑馬程式設計師的講解視訊, 所總結出來的一些 個人覺得相對重要的截圖。  視訊地址:https://www.bilibili.com/video/av17774929   <package name="cn.xxx.xxx"/>

關於Mybatis框架的個人總結

一:什麼是Mybatis? 剛學會jdbc的時候,對資料庫進行增刪改差,都要事先先寫一個連線工具類,用來載入驅動、獲取資料庫連線還有用完關閉連線這些通用操作,就像下面這張圖 然後操作dao層,增刪改差方法每個還要封裝一遍,程式碼重複枯燥,很沒意思。 所

個人總結_5.6

今天 總結 個人總結 -s 功能 family 全面 spa size 昨天幹了什麽:   窗口框架 今天幹了什麽:   swing組件,邊學邊寫 困難:   設計布局,功能想不全面個人總結_5.6

個人總結4-dbutils總結

基本 user 步驟 昨天 基礎 問題 頁面 發現 個人總結 昨天學習了dbutils的使用方法,簡化了使用的步驟,可以使用三四步就可以寫出來,queryRunner的使用方法有了簡單的了解,目前可以使用dbutils實現最簡單的增刪改查。 今天

個人階段個人總結07

bootstrap 發布 不能 數據 連接 dbutil 設計 使用 ots 昨天做了什麽?利用學習的bootstrap的知識,進行主界面和各個界面的前段的編寫,進行了美化的處理,完成了前端的設計。 今天準備做什麽?進行後端消息的發布界面的後臺的的程序的設計。 遇到了什麽困

第八屆山東省ACM大學生程序設計競賽個人總結

我們 斐波那契 實現 結果 。。 學校 合數 工作 們的 因為省賽,從開學緊張到5月7號。心思也幾乎全放在ACM的訓練上。因為我還是校臺球協會的會長,所以臺協還有一些事情需要忙,但是我都給延遲了。老會長一直在催我辦校賽,但我一直說 等等吧,因為校賽只能在周六

個人總結_5.10

span 調試 什麽 理解 程序 font 個人 昨天 鬧鐘 昨天幹了什麽   查找鬧鐘代碼 今天幹了什麽   完善代碼 困難    搜到的代碼不理解,程序調試不成功個人總結_5.10

個人作業3——個人總結(Alpha階段)

服務 不同 做到 用戶需求 用例 多語 n) 安排時間 想想 一、問題集錦 【問題一】在本書對於師生關系的講解中提到,最理想的師生關系是“健身教練/健身學員”。我認為“老師/學生”本來就是一種明確的關系,老師授業解惑,學生學習吸收。而再將這種關系比喻為健身教練與學員,難到

個人作業3——個人總結(Alpha階段)

view 做成 名詞 估算 支持多語言 擴展 常用模塊 不同的 日誌 1.說到軟件工程作業,很多同學都曾經苦惱過,想放棄。可是,當你堅持寫完的時候,突然間心情大好,發現原來自己能做得到。我也是這樣,缺乏自信心了,沒有人在後面推一把,就很難前進。框架吧,是用來打破的。我們不能

個人作業3--個人總結(Alpha階段)

target 愛好 項目 leader 平衡 構建 個人總結 spa 發的 我們也算是經過了一次軟件開發的人了,在Alpha階段過程和結果都不太理想,我們在寫事後諸葛亮會議的時候也感慨了很多,在小組會議的時候也討論了很多,為了完成這次作業,我又翻了翻《構建之法》這本書。這本

個人作業3——個人總結

空閑 流程 正在 想法 管理工具 它的 應付 多語 做了 一、問題 1.在《構建之法》這本書的2.1.2這一小節我看到了一句這樣的話“單元測試必須由最熟悉代碼的人(程序的作者)來寫”,可是在整個alpha版本階段中我們的代碼編寫和測試代碼的編寫都是由不同的人來完成,編寫代碼

個人作業3——個人總結(Alphe)

收獲 系統 吐槽 不同的 申請 過時 數學 sel exce 小結: 1、軟件工程的第一階段終於結束了,說實話,每個人的課程都很緊張,在這麽緊張的時期我們都每周抽出一些時間來開個小會總結或者計劃軟件工程的相關任何非常難得,大家的態度都誠懇認真,我亦是如此,只是我的能力有限,

個人作業3—個人總結(Alpha階段)

覆蓋率 總結 分配 further .cn 用戶 100% 兩個人 代碼覆蓋率 一、個人總結 在Alpha階段,我們團隊通過合作的方式,完成了之前覺得不大可能會完成的事(至少在我看來是這樣的),大家其實之前的寫代碼能力都不太好,這期間大家都是邊學邊做,邊做邊學,最後跌跌撞撞

第二階段個人總結03

出了 匹配 還需要 差距 以及 穩定 編寫 代碼 角度 昨天幹了什麽:   已經根據設計的方案基本編寫出了代碼,還需要測試其穩定性 今天準備幹什麽:   改進個人主頁面,與登錄界面做出相應的差別,從用戶的短期刺激和長期使用來考慮界面的模式以及所涉及的內容 遇到什麽困難:  

第二階段個人總結04

似的 自己 網上 聊天功能 相關 自己的 個人主頁 適合 簡單 昨天幹了什麽:   改進了個人主頁(與登錄界面區分開來),主要優點簡單明了,便於用戶長期使用 今天準備幹什麽:   查詢相應的網上聊天功能,了解實時聊天的實現方法(類似於聊天室),看看能不能嵌入到網站的功能上

個人總結

溝通能力 問題 充足 宋體 相對 自己 編程 發現 連接 軟件工程概論課程建議 對於17周的軟件工程概論的學習,我感覺我有了很大的收獲,我覺得這段時間對我來說學習了一個軟件工程師的成長過程,問我學到了很多東西,學會了團隊的開發

第二階段沖刺-個人總結04

新項目 學習 開始 嘗試 編寫 函數 沒有 環境 編譯環境 昨天幹了什麽: 嘗試編寫新項目,查閱資料視頻學習 今天準備幹什麽: 繼續根據視頻以及資料學習。 嘗試開始一些功能。 遇到困難沒有: 對函數與技術的不熟悉。   編譯環境的更新。