SpringMVC前置复习以及扩展
SpringMVC
ssm:mybatis+Spring+SpringMVC
javaSE javaweb 框架
理解的DAO层和Service层
先简单来讲下Dao层,和Service层的概念:
Service是业务层,Dao是数据访问层,这样的分层是基于MVC架构来说的。
Dao层:全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查
Service层:被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种操作封装起来。
具体起来,Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求;
而Service,则是专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现。
简单来说就是Dao层是底层,具体到某一张表的增删查改,可以理解为有多少张表就有多少个Dao层,而Service成可以理解为是Dao层的 “上司”,通过Service层来控制Dao层。
一个Service层控制一个或者多个Dao层。
举个栗子:Service层好比是老大,手下跟着一大帮小弟 (Dao层), 老大不用亲自出马,有事情吩咐小弟去干就行,老大只管下命令,小弟只管做事跑腿。
而为什么我们要通过Service层去调用Dao层,这样做的最大好处就是:
解耦。
说的通俗点就是降低代码之间的耦合,尽量让代码之间不要有太大的联系。
好比主板上内存坏了,我换内存就行,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存就都可以插上这个接口使用。
这样当某部分代码出错或者需要修改时,其他代码就不需要修改或者变更,好处就在这里。
而 Dao 层,只负责接收最终的 sql 语句,具体到某一张表的增删查改。
再用上面的老大和小弟的例子,小弟 (Dao层) 脑子一般不太灵光,不具备什么决策能力。能当上老大脑瓜都比较好使,命令由老大去下达,累活脏活交给小弟去干 (增删查改),底下一大帮子小弟听老大指挥,老大叫谁干什么就干什么。最后完成老大布置的任务。
Service层也不是就非有不可,对于极小的项目而言,加了Service层,反而增加了代码量,而且Dao层中已经预见了可能出现的情况,并进行了相应的扩展。那么,此时就不需要了。
虽然小弟脑子可能不太好使,但是有些事,你没脑子都能完成啊,这时就不需要老大出马了,不然一点屁大点的事都要麻烦老大,老大也太掉价了吧。
但是存在即合理,存在Service层肯定有其原因,通过Service层去调用Dao层,不仅可以解耦合,而且可以增加代码的拓展性。
MVC:模型(model)(dao,service) 视图(view)(jsp) 控制器(controll)(servlet)
一种软件设计规范
- 是将业务逻辑、数据、显示分离的方法来组织代码
- MVC主要作用是降低了视图与业务逻辑间的双向耦合
- MVC不是一种设计模式,MVC是一种架构模式。
MVVM
前端 数据传输 实体类
最经典的MVC就是JSP+servlet+javabean模式
Alibaba早期提出
去IOE(IOE架构就是使用IBM的小型机、Oracle数据库、EMC存储设备)
IBM代表硬件以及整体解决方案服务商,Oracle代表数据库,EMC代表数据存储。
All in One---->微服务(所有的项目都是由一个小项目逐渐演变过来的)
Controller:控制器
- 取得表单数据
- 调用业务逻辑
- 转向指定页面
Model:模型
- 业务逻辑
- 保存数据状态
view:视图
- 显示
MVC框架要做的事情
- 将url映射到java类或Java类的方法
- 封装用户提交的数据
- 处理请求--调用相关的业务处理--=封装响应数据
- 将响应的数据进行渲染.jsp/html等表示层数据
常见的MVC框架:Struts,SpringMVC,ASP.NET MVC、Zend Framework、JSF;
常见的前端MVC框架:vue、angularjs、react、backbone;
由MVC演化的另一些模式:MVP、MVVM等;
SpringMVC前置复习以及扩展的更多相关文章
- 提高生产力:SpringMVC中,使用扩展数据类型TypedMap接收Web请求参数
在Web项目中,如果前端MVC框架使用的是SpringMVC,可以使用Map接收前端请求参数,比bean要方便很多. 尤其是SpringMVC和Mybatis一起用的时候,用Map大大减少了需要的be ...
- SpringBoot日记——SpringMvc自动配置与扩展篇
为了让SpringBoot保持对SpringMVC的全面支持和扩展,而且还要维持SpringBoot不写xml配置的优势,我们需要添加一些简单的配置类即可实现: 通常我们使用的最多的注解是: @Bea ...
- SpringMVC前置控制器SimpleUrlHandlerMapping配置
1. <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5&qu ...
- springMVC知识点复习
@ResponseBody和@RequestBody的使用 <html> <script type="text/javascript" src="rel ...
- SpringMVC学习记录5
Springmvc流程中的扩展点有很多,可以在很多地方插入自己的代码逻辑达到控制流程的目的. 如果要对Controller的handler方法做统一的处理.我想应该会有很多选择,比如:@ModelAt ...
- spring+mybatis+springmvc的配置
1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?><web-app version=&qu ...
- SpringMVC源码剖析(一)- 从抽象和接口说起
SpringMVC作为Struts2之后异军突起的一个表现层框架,正越来越流行,相信javaee的开发者们就算没使用过SpringMVC,也应该对其略有耳闻.我试图通过对SpringMVC的设计思想和 ...
- SpringMvc环境搭建(配置文件)
在上面的随笔里已经把搭建springmvc环境的基本需要的包都下下来了,拉下来就是写配置文件了. 下面左图是总的结构,右图是增加包 一.最开始当然是web.xml文件了,这是一个总的宏观配置 < ...
- 调用链系列二、Zipkin 和 Brave 实现(springmvc、RestTemplate)服务调用跟踪
Brave介绍 1.Brave简介 Brave 是用来装备 Java 程序的类库,提供了面向标准Servlet.Spring MVC.Http Client.JAX RS.Jersey.Resteas ...
随机推荐
- 6000字Locust入门详解
目录 一.Locust 性能测试 (一). 性能测试工具 主流性能测试工具对比 认识Locust (二) locust 基本用法 1.安装locust 2.编写用例 3. 启动测试 GUI 模式启动 ...
- Bika LIMS 开源LIMS集—— SENAITE的安装
安装环境 操作系统 Ubuntu 18.04 LTS Python 2.x. Plone 4 安装步骤 Ubuntu等Linux.Mac系统一般安装有Python的环境,但由于需要安装Python扩展 ...
- JS:逗号运算符
逗号运算符: 会把逗号隔开的表达式全部执行 最后一个运行的表达式的结果就是逗号运算符的结果 例: var a = (1, 2, 3, 4, 5, 6); console.log(a); //6 隐 ...
- Python 中多线程共享全局变量的问题
写在前面不得不看的一些P话: Python 中多个线程之间是可以共享全局变量的数据的. 但是,多线程共享全局变量是会出问题的. 假设两个线程 t1 和 t2 都要对全局变量g_num (默认是0)进行 ...
- 最小生成树 链式前向星 Prim&Kruskal
Prim: Prim的思想是将任意节点作为根,再找出与之相邻的所有边(用一遍循环即可),再将新节点更新并以此节点作为根继续搜,维护一个数组:dis,作用为已用点到未用点的最短距离. 证明:Prim算法 ...
- Linux 批量杀死进程(详细版本)
使用场景 当程序中有使用到多进程且进程数较多的情况,如下图,且需要通过控制台杀死所有的 GSM_run.py 的进程时,利用 kill 命令一个一个的去结束进程是及其耗时且繁琐的,这时就需要我们的ki ...
- 阈值PSI代码
阈值PSI 若交集数量超过某个给定阈值时,允许分布式的各个参与方在自己集合中找到交集,且除了交集外,得不到其他额外信息. 实现论文: Multi-Party Threshold Private Set ...
- Solution -「COCI 2016-2017」 Mag 结论证明
结论:最多包含一个 \(2\),并且不在链的两端点. 证明:我们问题分成两个 \(\texttt{pass}\). \(\texttt{pass 1}\):\(\forall u,s.t.x_{u}\ ...
- 向docker镜像中传递变量的两种方式
测试用到的python文件: #!/usr/bin/env python3 #conding: utf-8 from http.server import HTTPServer, BaseHTTPRe ...
- YII页面缓存
IndexController.php namespace frontend\controllers; use yii; use yii\web\Controller; class IndexCont ...