当前位置: 首页 > news >正文

【springBoot】controller,service,dao,mapper,model层的作用

业务逻辑:

        Controller-->service接口-->serviceImpl-->dao接口-->daoImpl-->mapper-->db

 一:Dao(Data Access Object):数据存储对象

       DAO = Data Access Object = 数据存取对象. 不管是什么框架,我们很多时候都会与数据库进行交互。如果遇到一个场景我们都要去写SQL语句,那么我们的代码就会很冗余。所以,我们就想到了把数据库封装一下,让我们的数据库的交道看起来像和一个对象打交道,这个对象通常就是DAO。当我们操作这个对象的时候,这个对象会自动产生SQL语句来和数据库进行交互,我们就只需要使用DAO就行了。

    通常我们在DAO层里面写接口,里面有与数据打交道的方法。SQL语句通常写在mapper文件里面的。

    优点:结构清晰,Dao层的数据源配置以及相关的有关数据库连接的参数都在Spring配置文件中进行配置。

二:Service:服务

       服务是一个相对独立的功能模块,主要负责业务逻辑应用设计首先也要设计接口,然后再设计其实现该接口的类。这样我们就可以在应用中调用service接口进行业务处理。service层业务实现,具体调用到已经定义的DAO的接口,封装service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性 。

     如果把Dao层当作积木,则Service层则是对积木的搭建。

三:Controller:控制器

       主要负责具体业务模块流程的控制,此层要调用到Service层的接口去控制业务流程,控制的配置同样在Spring配置文件中配置。针对不同的业务流程有不同的控制器。在设计的过程可以设计出重复利用的子单元流程模块。

 

 四:model:模型

       模型就是指视图的数据Model,模型,通常来讲,我们会把模型和另一个东西放在一起来说:View,视图。

模型通常认为是视图的内核,何谓之视图?我们正在与之交互的网站的界面就是视图,而模型是指他的内核数据

        将Model和View的概念拆分开来,有助于我们关注不同的方面,也可以更有效的分工。有些工程师更关注于内核也就是模型,通常来说,他们被称之为后端工程师。有些工程师更关注于用户界面的交互和展示,通常来说,他们被称之为前端工程师。

五: View层:

       与Controller层关系紧密,View层主要负责前台jsp页面的表示。

 

六: 它们之间的关系:

      建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【springboot】什么是依赖注入
  • 【java】Java bean 是个什么概念?
  • 【web】Postman 使用教程详解
  • 【vue】vue项目结和start
  • 【vue】vue项目结构-2
  • 【vue】vue + springboot 简单登录代码
  • 【Maven 】Maven 错误 Failure to transfer ...was cached in the local repository...
  • 【Maven】Eclipse自带Maven增加setting.xml
  • 【springboot】springboot 错误集合
  • 【springboot】springboot 发布jar
  • 【springboot】springboot 注解
  • 【Vue】Vue项目开发目录结构和引用调用关系
  • 【RESTful API】SpringBoot RESTful API 架构风格实践
  • 【springboot】spring-boot + jdbc
  • 【Spring Boot 】Spring Boot Mybatis 使用教程
  • Angular 4.x 动态创建组件
  • Angular 响应式表单 基础例子
  • export和import的用法总结
  • HomeBrew常规使用教程
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaScript类型识别
  • JS变量作用域
  • MySQL几个简单SQL的优化
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Redis中的lru算法实现
  • 服务器之间,相同帐号,实现免密钥登录
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 马上搞懂 GeoJSON
  • 如何利用MongoDB打造TOP榜小程序
  • 【云吞铺子】性能抖动剖析(二)
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #14vue3生成表单并跳转到外部地址的方式
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (04)odoo视图操作
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (纯JS)图片裁剪
  • (含笔试题)深度解析数据在内存中的存储
  • (力扣题库)跳跃游戏II(c++)
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)elasticsearch 源码之启动流程分析
  • (四)模仿学习-完成后台管理页面查询
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • ****Linux下Mysql的安装和配置
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Core 中插件式开发实现
  • .NET Remoting学习笔记(三)信道
  • .NET8使用VS2022打包Docker镜像
  • .NET技术成长路线架构图
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • [Algorithm][动态规划][两个数组的DP][正则表达式匹配][交错字符串][两个字符串的最小ASCII删除和][最长重复子数组]详细讲解