對於剛學過框架的同學可能知道,mybatis有兩種主要的配置文件: SqlMapConfig.xml(mybatis全局配置文件,名稱不固定,用來配置運行環境(數據源、事務) XXXmapper.xml 主要用來配置sql語句 我以前做過一個項目,大概的層次結構如下: 從這個UML圖中可以看出這個項 ...
對於剛學過框架的同學可能知道,mybatis有兩種主要的配置文件:
SqlMapConfig.xml(mybatis全局配置文件,名稱不固定,用來配置運行環境(數據源、事務)
XXXmapper.xml 主要用來配置sql語句
我以前做過一個項目,大概的層次結構如下:
從這個UML圖中可以看出這個項目有和xml同名的介面,還有Dao層的實現類;
然而最近實習的時候,帶我們的導師給了一個項目,這個項目裡面竟然沒有mapper代理層和Dao的實現層
從圖中可以看出,向這種項目減少了XXXmapper.java和Dao層還有Service層的實現類。所以可以減少很多不必要的代碼。
使得代碼結構很清爽。
那麼可能有的人會有跟我一樣的疑問了,此時大家應該去看我的上一篇關於mybatis入門的教程
裡面講到了XXXmap.xml文件中的最上面namespace的作用,按照第一種mapper代理的方式,namespace裡面應該填寫的是和XXXmapper.xml同名的XXXmapper.java介面的全限定名。
而沒有了mapper代理層之後,namespace填寫的內容就是Dao層介面的許可權定名了。也就是說,現在Dao介面充當了Mapper介面。Dao介面中的方法,對應著配置文件中的Sql的id。
這樣就省去了mapper介面這一層無腦的代碼。
同樣的道理,Dao層的實現類裡面也是無腦的代碼,就是調用mapper介面裡面的方法。同理,Service層的實現類XXXServiceImpl.java裡面也是調用Dao介面的方法,別的一點事情都沒做,知識調用方法。所以同樣可以省略掉。
這就解決了我的很多疑問。也就慢慢的理解了,什麼是面向介面編程了。