我个人的理解是:涉及请求、参数、序列化之类的逻辑可以放在controller。而具体到数据的操作逻辑,也就是增删改查的操作都应该完整封装到service中。一方面是对于事务的要求,比如一个请求过来,后台需要多步增删改查,一般都要求放到一个service方法中也就是同一段事务里。另一方面也是为了提供统一的接口,有的业务除了本地的controller还会需要服务间通信,比如rest api或者rpc什么的,最后他们都应该从同一个service拿到一致的基础数据,然后由各自的controller按各自的需求加工后返回。

SpringBoot框架分层(View层、Controller层、Service层、Mapper层、pojo层)

View层:视图层,根据接到的数据展示页面给用户

Controller层:响应用户需求,决定用什么视图,需要准备什么数据来显示。Controller层负责前后端交互,接收前端请求,调用Service层,接收Service层返回的数据,最后返回具体的数据和页面到客户端

Service层:Service层也可以分为三个方面

  (1)接口:用来声明方法

  (2)继承实现接口

  (3)impl:接口的实现(将mapper和service进行整合的文件)

  Service层存放业务逻辑处理,有一些关于数据库处理的操作,但是不是直接和数据库打交道,有接口,也有接口的实现方法,在impl实现接口类中需要导入mapper类,mapper层是直接与数据库进行操作的。
  1. Mapper层:也可以称为DAO层,是数据库CRUD的接口,只有方法名,具体实现在mapper.xml文件中,对数据库进行数据持久化操作(把数据放到持久化的介质中,同时提供CRUD操作)

  2. src/main/resource文件夹中的mapper.xml文件,里面存储的是真正的数据库CRUD语句

  3. Pojo层:存放实体类,与数据库中的属性基本保持一致,一般包括getter、setter、toString方法(未使用插件lombok的情况下)。

层级
Service层在Mapper层之上,在Controller层之下,既调用Mapper接口,又提供接口给Controller层用。
分层后,访问数据库和进行Service之间分工明确,对Service的需求修改,无需修改Mapper层,如果有访问数据库的新需求,也只需要在Mapper层修改。
笔记
SpringMVC三层架构

java SpringMVC的工程结构一般来说分为三层,自下而上是Modle层(模型,数据访问层)、Cotroller层(控制,逻辑控制层)、View层(视图,页面显示层),其中Modle层分为两层:dao层、service层,MVC架构分层的主要作用是解耦。采用分层架构的好处,普遍接受的是系统分层有利于系统的维护,系统的扩展。就是增强系统的可维护性和可扩展性。

对于Spring这样的框架,(View\Web)表示层调用控制层(Controller),控制层调用业务层(Service),业务层调用数据访问层(Dao)。
service层:业务层,用来实现业务逻辑。能调用dao层或者service层,返回数据对象DO或者业务对象BO,BO通常由DO转化、整合而来,可以包含多个DO的属性,也可以是只包含一个DO的部分属性。通常为了简便,如果无需转化,service也可以直接返回DO。外部调用(HTTP、RPC)方法也在这一层,对于外部调用来说,service一般会将外部调用返回的DTO转化为BO。是专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现。主要去负责一些业务处理,比如取得连接、关闭数据库连接、事务回滚,一些复杂的逻辑业务处理就放到service层。

DAO层:负责访问数据库进行数据的操作,取得结果集,之后将结果集中的数据取出封装到VO类对象之后返回给service层。数据层,直接进行数据库的读写操作,返回数据对象DO,DO与数据库表一一对应。Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求。

Cotroller层:叫做控制层,主要的功能是处理用户发送的请求。主要处理外部请求。调用service层,将service层返回的BO/DO转化为DTO/VO并封装成统一返回对象返回给调用方。如果返回数据用于前端模版渲染则返回VO,否则一般返回DTO。不论是DTO还是VO,一般都会对BO/DO中的数据进行一些转化和整合。

View层:叫做显示层,主要是负责现实数据。

在实际开发中dao层要先定义出自己的操作标准即标准接口,就是为了解耦合。
明白了吗

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐