mybatis,mybatis連接池,延遲加載,緩存,二級緩存,註解開發,整合spring思路

JDBC編程

jdbc概念:是一種執行SQL語句的java api.
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

JDBC存在的問題

麻煩,頻繁的釋放資源,性能浪費,硬編碼,獲取到的結果處理麻煩.

Mybatis複習

架構

在這裏插入圖片描述
在這裏插入圖片描述
簡單流程 :在mapper.xml中寫SQL語句 mapper.java 寫對應的接口 .再配置mapper掃描後,(官方推薦方法)可以自動生成mapper接口的實現類.隨後用調接口中的方法就可以了.

配置文件介紹

SqlMapConfig.xml:

mybatis的全局配置文件.配置的是mybatis的運行環境等信息,主要是配數據庫信息.事務管理

基本配置

在這裏插入圖片描述
後期與spring整合後,這些基本都要廢除.sqlmapconfig.xml基本上是空文件

mapper.xml

在該文件中配置SQL語句,在sqlmapconfig.xml中加載mapper.xml

在這裏插入圖片描述
後面詳細回顧怎麼拼寫SQL語句

測試

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
說明: datasource 用的是sqlmapconfig.xml文件中配置的那個. user類就是定義的那個pojo類

模糊查詢

在這裏插入圖片描述
自我理解: #{}是個佔位符,直接將代碼中傳的參放入SQL語句,傳到SQL語句塊中像是直接傳的字符串, 而${}則是字符串拼接,可以在SQL語句中的字符串中鑲入傳的參數
補充:現在多數用#{}, ${}中只能爲value的原因是在源代碼中,是map.put(“value”,“xxx”);鍵的值爲value
在這裏插入圖片描述
直接傳入參數 username 王

在這裏插入圖片描述
傳入參數%王%
補充:

輸入輸出參數類型和selectone list

在這裏插入圖片描述
在這裏插入圖片描述
補充:ongl表達式把user.getUserName()省略成user.username了,’ .'表示調用(如果裏面還有的話)
使用mybatis開發dao有原始dao方法和使用mapper方法.
原始dao方法:dao接口 dao實現類(寫session調用selectone等封裝好的對數據庫操作的方法) SQL映射文件

mapper方法 官方推薦

在這裏插入圖片描述
個人理解 使用mapper方法只需按照規範寫接口,和mapper.xml映射文件.mybatis幫我們寫mapper接口的實現類
在這裏插入圖片描述在這裏插入圖片描述
通過getmapper方法獲得實例.
在這裏插入圖片描述

sqlmapconfig.xml詳細配置

在這裏插入圖片描述

properties:

在這裏插入圖片描述

在這裏插入圖片描述
補充:
在這裏插入圖片描述

typeAliases 別名(常用)

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
一般我們配包名批量定義 將類名定義爲別名
在這裏插入圖片描述

mapper 配置

在這裏插入圖片描述
項目中常用第三個方法(與spring整合後配的掃描包名的方法 真實項目)
在這裏插入圖片描述

mapper.xml的編寫相關知識點

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
個人理解:
mybatis是通過ognl來解析對象字段的.所以可以傳pojo 也可以傳包裝類 只需在SQL語句的編寫中在#{}${}中對應的字段屬性名就可以了 比如在這裏插入圖片描述

在這裏插入圖片描述

輸出pojo或者pojo列表

mybatis可以指定返回自己定義的pojo類型,只需要字段對應,有多個查詢返回就放到列表中

resultmap在這裏插入圖片描述

個人理解:當數據庫查的字段名和返回類型pojo中的名字對應不上時,使用resultmap將兩個名字聯繫在一起 那麼返回結果就能正確的映射到pojo返回類上
補充:
根本原因是數據庫字段與pojo名不匹配
解決方法1.sql語句中起別名
2.使用resultmap對應起來
補充細節
因爲:mysql 在 在 windows 系統中不區分大小寫!所以比如數據庫中列名username pojo 中userName 能封裝成功,而在linnux下 mysql嚴格區分大小寫,此時,這種情況無法封裝成功
區分:有關JAVA pojo類的區分大小寫(譬如佔位符中,if標籤判斷中是關於pojo的),sql語句中不區分(win下)

在這裏插入圖片描述

mybatis中提供的數據庫連接池

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
區別:
在這裏插入圖片描述

動態拼寫sql

當查詢條件越多需要編寫的SQL語句越多,這顯然不合理
適用: 查詢輸入參數爲pojo類的 ,在pojo中設置查詢參數

if標籤

在這裏插入圖片描述

注意: 字符串類型的需要做不等於 空串的校驗 且先判斷不等於null 在判斷不等於"".(短路).

where標籤

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
補充:SQL片段(抽取重複片段)
在這裏插入圖片描述
引用:
在這裏插入圖片描述
補充細節注意:SQL語句拼寫末尾加不加分號都一樣,建議不加,比如抽取出的片段有分號但是,後面還要拼接語句會出問題,有時可能會讓你找很久bug都找不出來原因

關聯查詢

在這裏插入圖片描述
一般思路 改造pojo 其他的依照SQL語句規則寫就行了 列如
在這裏插入圖片描述
1.繼承父類(新寫一個pojo)
在這裏插入圖片描述
2.改造pojo
在這裏插入圖片描述
在這裏插入圖片描述
這裏採用的 resultmap對應的映射關係
一對多resultmap編寫
在這裏插入圖片描述
##mybatis 延遲加載
在這裏插入圖片描述
延遲加載:
就是在需要用到數據時才進行加載,不需要用到數據時就不加載數據。延遲加載也稱懶加載.
好處:先從單表查詢,需要時再從關聯表去關聯查詢,大大提高數據庫性能,因爲查詢單表要比關聯查詢多張錶速
度要快。
壞處 :
因爲只有當需要用到數據時,纔會進行數據庫查詢,這樣在大批量數據查詢時,因爲查詢工作也要消耗
時間,所以可能造成用戶等待時間變長,造成用戶體驗下降。
在這裏插入圖片描述
實現:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述結果:
在這裏插入圖片描述
在這裏插入圖片描述
同樣我們也可以在一對多關係配置的結點中配置延遲加載策略。
結點中也有 select 屬性,column 屬性。
需求:
完成加載用戶對象時,查詢該用戶所擁有的賬戶信息。
在這裏插入圖片描述
個人理解:
延遲加載就是把多表查詢拆分成多個單表查詢.如果客戶(java代碼中)有查詢關聯的信息,則再去查詢相關信息.

mybatis一級緩存

一級緩存是 SqlSession 級別的緩存,只要 SqlSession 沒有 flush 或 close,它就存在。
測試方法:
在這裏插入圖片描述
在這裏插入圖片描述
一級緩存是 SqlSession 範圍的緩存,當調用 SqlSession 的修改,添加,刪除,commit(),close()等
方法時,就會清空一級緩存
在這裏插入圖片描述

mybatis二級緩存

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
注意事項:
當我們在使用二級緩存時,所緩存的類一定要實現 java.io.Serializable 接口,這種就可以使用序列化
方式來保存對象。
在這裏插入圖片描述

mybatis註解開發

常用註解
在這裏插入圖片描述
1.實體類編寫(與數據庫列名不一致)
在這裏插入圖片描述
未完待續

mybatis整合spring

在這裏插入圖片描述
注意點:
別名配置在sqlmapconfig.xml中,其餘的sqlsessionfactory datasource交給spring
自己寫daoimpl模式的需要把dao交給spring在配屬性sqlsessionfactory在這裏插入圖片描述
mapper代理方法:
自己配 或者開包掃描
在這裏插入圖片描述
在這裏插入圖片描述

mybatis逆向工程

適用:單表查詢時可以用逆向工程直接生成mapper.xml,pojo類和mapper接口.不用自己寫
關鍵點:
修改generatorConfig.xml文件的配置即可
在這裏插入圖片描述

資料

傳智黑馬

聲明

自學的黑馬,用途:複習一遍,順便寫個筆記.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章