對於剛學過框架的同學可能知道,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接口的方法,別的一點事情都沒做,知識調用方法。所以同樣可以省略掉。
這就解決了我的很多疑問。也就慢慢的理解了,什么是面向接口編程了。