在Java web项目开发中,会创建dao层和service层,dao层也是数据访问层,主要实现与数据库之间的数据交互逻辑;service层是业务层,主要实现项目业务的逻辑。更加直白的说,在dao层我们只需要关心数据库的操作,每张数据库表对应一个Dao对象,Dao对象来实现对数据库的查询、更新等操作;而Service层可以同时对多个Dao对象进行操作;当然从实现的角度而言,可以将Dao层实现的功能放在Service层实现,但这样会带来一些问题,如会经常修改业务层的代码,会将业务与对象紧耦合。因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。
以SSH框架中实现的用户模块:
- 假设现在存在两个数据库表,user表和权限表,前端页面访问action,action再去调用用户模块service,用户模块service会判断你是操作user表还是权限表,如果操作的是user表则service类就去调用userDAO。如果操作的是权限表则调用权限的DAO;
- 即DAO一定是和数据库的每张表一一对应,而service则不是。其实你一个项目一个service和一个DAO其实也一样可以操作数据库,如果操作的表非常多,出问题了,那找起来多麻烦,而且太乱了;
- 好处就是你的整个项目非常系统化,和数据库的表能一致,而且功能模块化,这样以后维护或者改错比较容易,性能也高一些