?
🛫更多ssm知識見SSM_面向CRUD編程專欄
🚕本博客總結自黑馬程序員的ssm框架視頻
🚒博主對于該知識尚在學習階段
🚄如果發現存在問題請毫不吝嗇的指出
🚀🚀扎哇太棗糕的博客主頁🚀🚀
目錄
1 MyBatis初識
1.1 MyBatis的開發步驟
1.2 mapper映射文件:
1.3?核心配置文件
2 MyBatis的dao層(mapper層)實現
2.1 代理開發方式
2.2 映射文件進階之動態sql
2.3?核心配置文件進階
3 MyBatis多表操作
4 MyBatis實現注解開發
1 MyBatis初識
? ? ? ? 下面都是官方的解答有些過于的生硬,按我個人理解就是MyBatis框架就是用來代替jabcTmplate的一個巨巨巨好用的持久層框架,其底層封裝的東西比較多,所以開發起來就比較快速。MyBatis是一個基于Java的持久層框架,它的內部封裝了jdbc使得開發者只需要關注于SQL語句本身,而不需要花費精力去處理加載驅動、創建連接、創建statement等繁雜的過程。MyBatis通過xml或者注解的方式將要執行的各種statement配置起來,并通過Java對象和statement中的SQL的動態參數進行映射生成需要執行的SQL語句。最后MyBatis框架執行SQL語句并將結果映射成Java對象并返回,采用ORM(將實體類與數據庫表進行映射)思想解決了實體與數據庫映射的問題,對jdbc進行封裝屏蔽了jdbc底層訪問的細節直接完成數據庫持久化操作。
1.1 MyBatis的開發步驟
? ? ? ? MyBatis后期結合spring框架進行開發還是有一些小不同的,以下的開發步驟知識為了快速入門而學習,由簡入難的學習步驟更加有利于知識點進行掌握。
第一步:導入相關依賴
第二步:創建實體類
第三步:創建mapper映射文件
?第四步:創建核心配置文件
測試類及結果:
1.2 mapper映射文件:
映射文件包含的內容? ? ? ? ? ? ? ? ? ??
增刪改查操作
????????原始的jdbc默認事務完成之后進行提交,MyBatis的事務默認完成之后不提交。所以當數據進行增刪改操作時,必須使用sqlsession.commit()進行手動提交。或者調用openSession方法創建sqlSession對象的時候傳參為true,意味著每次更改自動提交。
? ??
? ? ?
? ? ?
1.3?核心配置文件
🤔environments標簽
- transactionManager標簽的Type值? ? ?
- JDBC:直接使用JDBC的提交和回滾設置,依賴于從數據源得到的連接來進行事務的管理
- MANAGED:幾乎不用,了解即可
- dataSource標簽的Type值
- UNPOOLED:不使用連接池,數據庫的連接隨著使用創建和釋放
- POOLED:使用連接池,創建一次,隨用隨取
- JNDI:幾乎不用,了解即可
?😏Properties標簽?
????????用于加載外部的properties文件,獲得數據源參數信息${}進行引用,配合上面的DataSource標簽進行使用
😑typeAliases標簽
????????為java類定義一個別名,這樣的話就可以在mapper映射文件中使用別名指定參數類型和結果類型了,方便操作。
?? ?核心配置文件中那么多標簽是有順序的,如果不按照規定的順序配置標簽的話,就會導致文件報錯!!!
?? ? 除了自定義別名以外,MyBatis框架已經為一些常用類型設置好了別名,比如int、string、long、double………
?😲mappers標簽
????????用于加載mapper映射文件,暫時只用學習相對路徑加載的這一種
2 MyBatis的dao層(mapper層)實現
2.1 代理開發方式
? ? ? ? Mapper代理開發方式只需要編寫Mapper接口,由MyBatis框架根據接口中定義的方法通過反射創建出相應的代理對象和接口的實現類方法。要想完成以上開發,需要遵循以下規范:
- 接口的全限名和mapper映射文件中的namespace相同
- 接口中方法名和mapper映射文件中的每個mapper標簽的子標簽的id相同
- 接口中方法的參數類型和mapper映射文件中的每個mapper標簽的子標簽的parameterType相同
- 接口中方法的返回值和mapper映射文件中的每個mapper標簽的子標簽的resultType相同
開發步驟:
????????🥓代理開發最主要的就是上面的四個規范,只要將理解并完成規范之后,開發就會異常的快且方便
第一步:導依賴坐標?
第二步:編寫實體類?
第三步:編寫核心配置文件和數據源配置的properties文件
第四步:對比著接口配置mapper映射文件
測試類及其測試結果:
2.2 映射文件進階之動態sql
?? ? ? ? 上面的這種SQL語句寫法相當一一個精確匹配,但凡三個參數少任意一個都會造成這么一個問題,就是沒有匹配的結果輸出。但是一般的業務情況下如果參數少了一個的話就認為這個參數可以是任意值,也就相當于模糊匹配的概念。要想完成這個功能就需要使用動態SQL語句,也就是使用標簽進行。
🍕<where>和<if>標簽
? ? ? ? ?<if>標簽實際上就是對test屬性值的條件判斷,只有當條件滿足了才會將標簽內部的語句拼接到上面的select語句中,如果都不滿足就會查詢所有,有幾個條件滿足都會拼接到where條件限制,where條件限制不固定就是動態SQL語句的由來。
🍔<foreach>標簽
? ? ? ? <foreach>標簽實際上就是可以拼接SQL語句,有前后的SQL語句成分,有中間的字段值(集合或數組)和分隔符
🌭<sql>片段抽取標簽
2.3?核心配置文件進階
🌮typeHandlers標簽
? ? ? ? 一些情況下我們會有這樣的一個業務需求:java中的數據類型與要存放到數據庫中的類型不一致,或者數據庫中的數據類型和我們需要獲取的類型不一致,這時候就需要我們使用自定義的類型處理器了。typeHandlers標簽就是用于在核心配置文件中對自定義的類型處理器進行注冊使用,于是自定義類型處理器的使用就有兩個比較重要的步驟定義處理器類和核心配置文件注冊。
????????下面的案例就是java中是一個Date類型的數據,需要將date轉成時間毫秒值存儲到數據庫中,從數據庫中取出時還必須是Date類型。
定義處理器類
?核心配置文件注冊
🍜plugins標簽
? ? ? ? MyBatis可以使用第三方的插件進行功能的拓展,plugins標簽就是對拓展功能的注冊
比如說使用分頁插件查詢數據庫信息
第一步:導入分頁插件的相關依賴
第二步:核心配置文件配置分頁插件
第三步:測試類中設置分頁參數,并獲取相關參數
????????核心配置文件中的標簽配置是遵循以下順序的,如果順序改變的話會導致報錯,且紅框框住的是相比較而言重要的,且前面都講過
3 MyBatis多表操作
????????表與表之間有三種對應關系:一對一、一對多、多對多,加下來讓我們依次學習一下這三種關系該的表查詢如何操作
🥩一對一
一張訂單唯一對應著一個用戶
第一步:首先要有兩個表和對應的實體類,兩個表之間還要有一個外鍵進行表之間的連接
第二步:對應著mapper接口寫mapper映射文件
?第三步:配置核心配置文件
?第四步:測試及結果
?? ?還有一種映射關系的配置方式,使用<association>標簽可讀性更加好
🍗多對一
一個用戶對應著多張訂單
第一步:首先要有兩個表和對應的實體類,兩個表之間還要有一個外鍵進行表之間的連接。仔細看,這個案例使用的表還是那兩張表,但是實體類就不是上一個案例的實體類了。
?第二步:對應著mapper接口寫mapper映射文件
?第三步:配置核心配置文件,這里的加載mapper映射文件和上一個案例不一樣,其他配置都一樣?
第四步:測試及結果,這里只查詢用戶id為1的訂單,查詢出來的所有訂單在后面進行拼接,無法全部展示
🍖多對多
一個用戶扮演多個角色,一個角色被多個用戶扮演
?第一步:首先要有三個表和除了連接表之外的實體類,兩個表之間還要有一個連接表進行角色表和用戶表之間的連接。
?第二步:對應著mapper接口寫mapper映射文件
?第三步:配置核心配置文件,這里的別名role1不一樣,其他配置都一樣?
?第四步:測試及結果
????????學到這MyBatis基本上已經夠用了,下面的注解開發只做了解,可以不學,注解開發與xml配置開發的不一樣的地方就是,注解開發使用注解將mapper映射文件取而代之,在核心配置文件里mapper映射文件的加載換成包下注解掃描。
4 MyBatis實現注解開發
簡單的CRUD注解開發
第一步:創建表和實體類、導入依賴 都不再演示
第二步:配置核心配置文件,加載配置文件、配置數據庫、掃描包下注解
第四步:接口方法上加注解,省去mapper映射文件
第五步:和xml開發一樣直接調用方法?
多表查詢的注解開發
一對一
一張訂單唯一對應著一個用戶
第一步:創建user、order表和實體類、導入依賴 都不再演示
第二步:配置核心配置文件,加載配置文件、配置數據庫、掃描包下注解,和上面的一樣不再演示
第三步:接口方法上加注解,省去mapper映射文件
?第四步:和xml開發一樣直接調用方法?
?? ?還有一種注解開發方法,和下面要學習的一對多的開發一樣,提前了解一下
一對多
一個用戶對應著多張訂單
?第一步:創建user、order表和實體類、導入依賴 都不再演示
第二步:配置核心配置文件,加載配置文件、配置數據庫、掃描包下注解,和上面的一樣不再演示
第三步:一對多和一對一的拓展方法一樣,需要借助其它方法進行查詢,在rolemapper創建一個通過id查詢的方法
?第四步:usermapper接口方法上加注解,省去mapper映射文件
第五步:和xml開發一樣直接調用方法?
多對多
一個用戶扮演多個角色,一個角色被多個用戶扮演
?第一步:創建user、sys_user_role、sys_role表和User、Role實體類、導入依賴 都不再演示
?第二步:配置核心配置文件,加載配置文件、配置數據庫、掃描包下注解
第三步:一對多和一對一的拓展方法一樣,需要借助其它方法進行查詢,在ordermapper創建一個通過id查詢的方法
第四步:usermapper接口方法上加注解,省去mapper映射文件
第五步:和xml開發一樣直接調用方法?
????????至此,SSM框架的所有知識點都已經到達入門級別了,接下來就是將前面學的所有的知識點或者說框架進行一個整合,形成一個完整的ssm知識體系了。整合完成之后就是進行一個ssm框架項目的實操,讓我們一起加油吧🤑🤑
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
上一篇:【SSM面向CRUD編程專欄 7】springAop 事務控制_
下一篇:【SSM面向CRUD編程專欄 9】SSM框架整合