对于刚学过框架的同学可能知道,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接口的方法,别的一点事情都没做,知识调用方法。所以同样可以省略掉。
这就解决了我的很多疑问。也就慢慢的理解了,什么是面向接口编程了。