目錄
Mybatis 架構簡介
MyBatis 中# 和 $ 的差別?
Mybatis 和 Hibernate 的差別
Mybatis 緩存?
Mybatis 裡多對多如何處理? 舉個多對多的例子?
MyBatis 執行流程
Mybatis 架構簡介
- Mybatis架構也是一個持久層架構,我們目前做的這個及格項目就是用的這個架構,我覺得相對對于以前的hibernate來說比較簡單把,把sql語句寫在配置檔案裡,解除了代碼和sql語句的耦合度,寫一些複雜的查詢比較靈活。
MyBatis 中# 和 $ 的差別?
- 這兩個符号一般是在使用Mybatis編寫底層SQL語句時使用,#就是一個占位符,具體的使用是#{id},而$是一個原樣輸出的辨別,是${value},我在項目裡一直是使用#,因為這樣可以防止Sql注入,安全性高
Mybatis 和 Hibernate 的差別
- Hibernnate一個是全封裝,mybatis是半封裝,使用hibernate做表單查詢操作的時候比較簡單(因為hibernate是針對對象進行操作的),但是多表查詢起來就比較繁瑣了,比如說5張表,十張表做關聯查詢,就算是有SQLquery那後續的維護工作也比較麻煩,還有就是Hibernate在Sql優化上執行效率上回遠低于mybatis(因為hibernate會把表中所有的字段查詢出來,比較消耗性能),我們以前在做傳統項目方面用過hibernate,但是現在基本上都在用mybatis
Mybatis 緩存?
- mybatis一級緩存是SqlSession級别的緩存,預設支援一級緩存,不需要再配置檔案去配置。
- mybatis的二級緩存是mapper範圍幾倍,除了在SqlMapConfig.xml設定二級緩存的總開關<settingname='cacheEnabled'value='true'/>,還要在具體的mapper.xml中開啟二級緩存:<mappernamespace='cn.hpu.mybatis.mapper.UserMapper'>
Mybatis 裡多對多如何處理? 舉個多對多的例子?
- 比如說學生表和課程表,一個學生可以選擇多門課程,一門課程能被多個學生選擇,這兩張表的關系就是多對多的關系,怎麼處理多對多的情況?遇到這種情況我們得建立一張中間表,關聯後就是課程表對橋表就是一對多,學生表對橋表也是一對多,就可以了
MyBatis 執行流程
【待完善】