一:什么是Mybatis
二:Mybatis就是簡化jdbc代碼的
三:Mybatis的操作步驟
1:在數據庫中創建一個表,并添加數據
我們這里就省略了
2:Mybatis通過maven來導入坐標(jar包)
3:編寫Mybatis的核心配置文件
注意:引用類的時候用.,路徑用//
5:編寫Mapper.xml的配置文件(對應的實體類自己寫)
5:加載配置文件
四:Mapper代理開發
原先我們執行sql語句的時候,要指定哪個sql語句,sql語句一多找起來很麻煩
現在用Mapper代理,就可以自動識別里面的sql語句,這樣找起來更方便,就不用手動找了
1:放到同一目錄下
2:映射文件命名空間為接口的全名,id就是這個sql語句的功能,對應的實體類就是你寫的那個類
3:在Mapper接口中定義方法,方法名與映射文件中的id保持一致,返回值為List<text>(根據編寫的sql語句的功能來)
4:進行編碼
過程就是:
1:我們獲取這個接口的class文件,他就在當前目錄下找映射的命名空間與這個接口的全類名一致的映射文件
2:我們調用接口里面的方法,他就到對應的映射文件里面找到方法和id名字對應的sql語句,并封裝對應的實體類,返回一個泛型集合,這個泛型根據實體類
接口的全類名對應映射文件的命名空間
接口里面的方法的名字對應映射文件的id
接口里面的方法的返回值對應映射文件的實體類
代理模式(aop):一個代理對應一個老板
我們去找代理,代理找老板
我們告訴代理要干什么,代理在通知老板要干什么
注意
使用指定包時
MyBatis 通過配置的路徑直接解析 XML,再根據 namespace
?找到對應的接口和id
綁定接口方法,與文件名無關
使用package代理時
XML 文件名必須與接口名一致?如接口?TextMapper.java
?需對應?TextMapper.xml
。若不一致,包掃描無法關聯兩者?
XML 需與接口同級目錄?編譯后,XML 必須位于?target/classes/com/yunlong/mapper/
?下
命名空間和 SQL?id
?要求不變?仍需匹配接口全限定名和方法名?
五:Mybatis核心配置文件
可以設置一個別名來簡化對應的實體類代碼的簡寫
類型別名簡化
- 未配置時:需在Mapper XML中寫完整的類路徑(如
resultType="com.yunlong.pojo.User"
) - 配置后:只需寫類名如
resultType="User"
六:我們先解決數據庫中的字段名和實體類中的成員的名字不一樣導致不能封裝
1:起別名
2:使用sql片段
3:使用resultmap進行映射
把數據庫中的字段名和實體類中的成員的名字不一樣進行映射,id就是實體類的名字(因為用的package進行代理,所以只需要寫實體類的名字就可以了)
column:表的字段名,property:實體類的屬性名
七:使用配置文件完成數據庫的增刪改查
增:
特殊字符處理:
我們是在xml文件里面寫的,所以要符合xml文件的語法,如果遇到特殊字符我們使用以下幾種方法
1:使用轉義字符
2:CDATA區
多條件查詢:
寫參數的幾種方法
1:散裝參數
如果方法中有多個參數,那方法中的參數要使用@param("和sql語句的參數相同"),相當于占位符,這樣他就知道傳入sql語句的參數是哪個了,占位符和sql語句里面參數保持一致
2:使用對象傳入,根據成員的參數依次傳入,要求實體類的屬性名名和sql語句中的參數名保持一致,對應的上就可以
3:使用鍵的對象傳入,鍵的名字和sql語句參數的名字一致
動態條件查詢
1:先判斷傳進來的屬性值是否為空,在拼接sql語句
改進傳入參數的bug
第一種:where后面加1=1
第二種:使用where標簽
單條件的動態條件查詢
從多個條件中選擇一個條件查詢,選擇哪個將拼接哪個
如果用戶一個都沒選,那么將報錯
choose:相當于java里面的switch
when相當于java里面的case
otherwise相當于java里面的default
改進方案:
1:加入一個otherswise如果用戶什么都沒選將會拼接這個
2:加入where標簽也可以,如果用戶什么都沒選將會去掉where
添加:
代理:
映射文件:
測試類里面的代碼
想要返回主鍵的值,在映射文件中增加這個,它就把id的值存入到了實體類的對象當中
修改:
利用set標簽,避免最后一個用戶不修改的話,導致語法錯誤
刪除:
我們要批量刪除,我們要遍歷數組,map會將數組封裝成一個map集合,我們寫array就可以了,鍵是array,值為數組,利用鍵來遍歷,或者使用注解
collection:我們要遍歷的數組
item:遍歷出來的數
separator:分隔符
open和close:開始和結束的標記
參數傳遞:
我們在方法中傳遞的參數,映射文件中參數是如何接收方法中傳遞的參數
單個參數:里面屬性要和映射文件的參數的名稱要保持一致
多個參數:將參數封裝為map集合,鍵的名稱固定的,值就是傳過來的值,
我們通過鍵來獲取值,通過注解我們就可以改變鍵的名稱
我們想要傳過來的參數在映射文件中使用,只有兩種方法
1:使用默認的map的鍵
2:使用注解來改變map的鍵,來使用注解的形式
我們在映射文件的sql語句中我們要使用map的鍵,它會自動來獲取對應的值
八:使用注解完成數據庫的增刪改查
使用注解開發就不需要寫映射文件了,直接在代理的方法上面寫注解就可以了
他就不找映射文件了,而是找方法上面對應的注解
怎么寫:
一個核心配置文件代表多個數據庫,可以切換
一個映射文件,代理,實體類代表數據庫中的一張表