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文件的配置即可
資料
傳智黑馬
聲明
自學的黑馬,用途:複習一遍,順便寫個筆記.