文章部分內容整理自郭永鋒視頻教學內容!
目錄
一、Mybatis的Dao編寫【mapper代理方式實現】
Mapper代理的開發方式,程序員只需要編寫mapper接口(相當於dao接口)即可。Mybatis會自動的爲mapper接口生成動態代理實現類。不過要實現mapper代理的開發方式,需要遵循一些開發規範。
1、mapper接口的全限定名要和mapper映射文件的namespace的值相同。 |
2、mapper接口的方法名稱要和mapper映射文件中的statement的id相同。 |
3、mapper接口的方法參數只能有一個,且類型要和mapper映射文件中statement的parameterType的值保持一致。 |
4、mapper接口的返回值類型要和mapper映射文件中statement的resultType值或resultMap中的type值保持一致 |
第一步:重新寫個UserMapper文件和定義mapper映射文件UserMapper.xml(內容同Users.xml,除了namespace的值),放到新創建的目錄mapper下。 |
|
第二步:在全局配置文件中添加映射配置文件 |
|
第三步:測試 |
|
二、mybatis與hibernate的區別
1、通過直接編寫SQL語句,可以直接對SQL進行性能的優化。 |
2、學習門檻低,學習成本低。只要有SQL基礎,就可以學習mybatis,而且很容易上手。 |
3、由於直接編寫SQL語句,所以靈活多變,代碼維護性更好。 |
4、不能支持數據庫無關性,即數據庫發生變更,要寫多套代碼進行支持,移植性不好。 |
5、需要編寫結果映射。 |
1、標準的orm框架,程序員不需要編寫SQL語句。 |
2、具有良好的數據庫無關性,即數據庫發生變化的話,代碼無需再次編寫。(以後,mysql數據遷移到oracle,只需要改方言配置)。 |
3、學習門檻高,需要對數據關係模型有良好的基礎,而且在設置OR映射的時候,需要考慮好性能和對象模型的權衡。 |
4、不能支持數據庫無關性,即數據庫發生變更,要寫多套代碼進行支持,移植性不好。 |
5、程序員不能自主的去進行SQL性能優化。 |
Mybatis應用場景:
需求多變的互聯網項目,例如電商項目。
Hibernate應用場景:
需求明確、業務固定的項目,例如OA項目、ERP項目等。
三、延遲加載(懶加載)
延遲加載又叫懶加載,也叫按需加載。也就是說先加載主信息,在需要的時候,再去加載從信息。在mybatis中,resultMap標籤 的association標籤和collection標籤具有延遲加載的功能。
UserMapper.java |
|
OdersMapper.java |
|
UserMappler.xml |
|
OrdersMapper.xml |
|
在全局配置文件中配置懶加載 |
|
測試 |
|
沒有配置懶加載之前:即使不打印訂單所屬人的信息,也會執行查詢訂單所屬人的sql語句。
配置懶加載後:只有在代碼執行到打印所屬人信息那一行時纔會執行查詢訂單所屬人的sql語句。
四、一級緩存
一級緩存指的就是sqlsession,在sqlsession中有一個數據區域,是map結構,這個區域就是一級緩存區域。一級緩存中的key是由sql語句、條件、statement等信息組成一個唯一值。一級緩存中的value,就是查詢出的結果對象。
原理:
第一次查詢id爲1的用戶,會執行sql語句,並將結果寫入sqlsession一級緩存區域Map。
第二次查詢id爲1的用戶,不會執行sql語句,而是從一級緩存中讀取數據。
若在第一次和第二次查詢之間執行了保存、刪除、更新的操作,一級緩存將會消除,之後進行第二次查詢id爲1的用戶又會執行sql語句。
五、二級緩存
二級緩存指的就是同一個namespace下的mapper,二級緩存中,也有一個map結構,這個區域就是二級緩存區域。二級緩存中的key是由sql語句、條件、statement等信息組成一個唯一值。二級緩存中的value,就是查詢出的結果對象。一級緩存是默認使用的。二級緩存需要手動開啓。
原理:
開啓二級緩存總開關 |
|
UserMapper中配置二級緩存 |
|
User系列化 |
|
測試 |
|