SpringBoot三层架构Controller、Service、Dao作⽤和关系详解
⾸先创建⼀个springboot项⽬。
model层
model层也叫pojo层或者entity层,个⼈⽐较喜欢pojo层。
⼀般数据库的⼀张表对应⼀个pojo层,并且表中所有字段都在pojo层都⼀⼀对应。
然后要先建⼀个pojo的package,代表它是实体层。
再在该package下创建⼀个Goods的java⽂件,创建的对象都是和表⾥字段⼀⼀对应,如下所⽰:
package;
import*;
@Data
public class Goods {
/
*
商品编号
*/
private String GNo;
/*
商品名称
*/
private String GName;
/*
商品价格
*/
private Double GPrice;
}
这⾥的lombok的作⽤时为了简化代码,因为对于private这样的对象,想要调⽤它的时候,需要get和set两个⽅法,⽽有了lombok之后就可以不⽤写,直接⽤即可。
不过要添加依赖和注解@Data,lombok还有很多其他⽤法,之后可能会出⼀篇博客。
通过maven下载依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
这样数据库⾥的字段,我们就可以⽤对象来表⽰。
但是model不属于springboot的三层框架。
主要说明是dao层、service层和controller层。
这些已经是属于后端了。
对于⼀个项⽬,安全性是⾮常有必要的,所以springboot很好地体现了这⼀点。
⽐如:
想要访问数据库并且操作,只能通过dao层向数据库发送sql语句,将这些结果通过接⼝传给service层。
想要处理数据,要先向dao层请求数据,对dao层传过来的数据进⾏加⼯处理,将这些处理好的数据通过接⼝传给controller层。
客户想要查询或修改数据时,要先向service层请求数据,收集service层传过来的数据,将这些数据通过接⼝显⽰给客户,⼀般通过html等⽅法给客户。
下⾯会⼀⼀说明。
Controller:
顾名思义,业务控制,就是控制业务层Service的,它的作⽤主要是架起了外界与业务层沟通的桥梁,移动端,前端在调⽤接⼝访问相关业务时,都会通过Controller,由Controller去调相关的业务层代码并把数据返回给移动端和前端;
Service:
业务层,所有的内部的业务逻辑都会放在这⾥处理,⽐如⽤户的增删改查,或者发送个验证码或邮件,或者做⼀个抽奖活动等等等等,都会在Service中进⾏,当然,业务离肯定是离不开数据的⽀持,因此Dao层是必不可少的;
dao层springboot框架的作用
dao就不做解释了,数据持久化层,就是和数据库打交道的,⽽实现持久化层的框架⼜有很多,⽽常⽤的有两种:JPA和MyBatis,JPA是SpringBoot官⽅的,前⾝就是著名的三⼤框架之⼀的Hibernate,好处是不⽤⼿写SQL(当然它也⽀持⼿写,如果必要的话),国外⽤的⽐较多,⽽MyBatis则在国内⽐较流⾏,原因是它的灵活性⾮常⾼,但是需要⼿写SQL语句!关于它们谁更好的争论从来没有停⽌过,这⾥不作讨论,不过可以给出⾃⼰的⼀些建议:
项⽬复杂程度⼀般,追求稳定,迭代速率低的可以⽤JPA;
项⽬较复杂,需求变更频繁,迭代速度快的可以⽤MyBatis;
我们了解了他们的作⽤后,可能有同学会问:为什么必须要写Service层,我直接⽤Controller层操作Dao层,省去Service层,岂不是更简单?
我们知道Controller的作⽤,它是⼀个桥梁,或者说⼀个中间者/服务者,打个⽐⽅,⼀个底层销售想见马云,但马云岂是谁都可以见的?如见了⾯安全如何保障?所以就会通过⼀个中间者或服务⼈员与销售沟通,销售通过中间者传达⾃⼰的⽬的,中间者再经过整理后请⽰马云爸爸,最后把马云爸爸的反馈信息转给这个销售,这样销售即达到了⾃⼰的⽬的,马云爸爸的安全也得到了保障,两全其美!
因此,Controller层是不允许直接操作数据库的!另外,Service对以后的分布式部署有极⼤的作⽤,它就像⼀个服务员,哪桌客⼈需要点菜了,就喊⼀声服务员!对应的,外界需要完成什么样的业务,就通过Controller去调⽤不同的Service,需要记住的是,Controller只是⼀个中间者或者转发者,不应该在Controller⾥暴露Service的业务逻辑,⽽应该直接转发Service的业务处理结果!
⼀般的,⼀个Controller对应⼀个Service,⼀个Service对应⼀个Dao,⼀个Dao对应⼀个数据库表,当然根据项⽬或业务复杂程度,⼀个Controller可以调⽤多个Service,⽽⼀个Service也可以调⽤多个Da
o,但是Controller层不允许互调,Service层也不允许互调,意思就是AController不能直接调⽤BController,AService也不能直接去调⽤BService,遵循⾼内聚低耦合原则!
这样,客户可以通过请求的⽅式,将数据从前端传给Controller层,然后⼀层⼀层传下去,在⼀层⼀层地传上来,实现了后端开发。
是不是发现和前端没什么关系?
是的,springboot还有⼀个优点就是实现了前后端分离,从⽽⼯作⼈员分配任务的时候更加具有条理性。⽽三层的架构可以让程序员很快地知道bug出现在哪⾥,哪⼀层,哪⼀⽂件,很快的修改bug。
呜呼,总⽽⾔之,springboot作为web开发的⼀个主流框架,正式因为这些优秀点让它脱颖⽽出。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论