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前置复习以及扩展的更多相关文章

  1. 提高生产力:SpringMVC中,使用扩展数据类型TypedMap接收Web请求参数

    在Web项目中,如果前端MVC框架使用的是SpringMVC,可以使用Map接收前端请求参数,比bean要方便很多. 尤其是SpringMVC和Mybatis一起用的时候,用Map大大减少了需要的be ...

  2. SpringBoot日记——SpringMvc自动配置与扩展篇

    为了让SpringBoot保持对SpringMVC的全面支持和扩展,而且还要维持SpringBoot不写xml配置的优势,我们需要添加一些简单的配置类即可实现: 通常我们使用的最多的注解是: @Bea ...

  3. SpringMVC前置控制器SimpleUrlHandlerMapping配置

    1. <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5&qu ...

  4. springMVC知识点复习

    @ResponseBody和@RequestBody的使用 <html> <script type="text/javascript" src="rel ...

  5. SpringMVC学习记录5

    Springmvc流程中的扩展点有很多,可以在很多地方插入自己的代码逻辑达到控制流程的目的. 如果要对Controller的handler方法做统一的处理.我想应该会有很多选择,比如:@ModelAt ...

  6. spring+mybatis+springmvc的配置

    1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?><web-app version=&qu ...

  7. SpringMVC源码剖析(一)- 从抽象和接口说起

    SpringMVC作为Struts2之后异军突起的一个表现层框架,正越来越流行,相信javaee的开发者们就算没使用过SpringMVC,也应该对其略有耳闻.我试图通过对SpringMVC的设计思想和 ...

  8. SpringMvc环境搭建(配置文件)

    在上面的随笔里已经把搭建springmvc环境的基本需要的包都下下来了,拉下来就是写配置文件了. 下面左图是总的结构,右图是增加包 一.最开始当然是web.xml文件了,这是一个总的宏观配置 < ...

  9. 调用链系列二、Zipkin 和 Brave 实现(springmvc、RestTemplate)服务调用跟踪

    Brave介绍 1.Brave简介 Brave 是用来装备 Java 程序的类库,提供了面向标准Servlet.Spring MVC.Http Client.JAX RS.Jersey.Resteas ...

随机推荐

  1. 6000字Locust入门详解

    目录 一.Locust 性能测试 (一). 性能测试工具 主流性能测试工具对比 认识Locust (二) locust 基本用法 1.安装locust 2.编写用例 3. 启动测试 GUI 模式启动 ...

  2. Bika LIMS 开源LIMS集—— SENAITE的安装

    安装环境 操作系统 Ubuntu 18.04 LTS Python 2.x. Plone 4 安装步骤 Ubuntu等Linux.Mac系统一般安装有Python的环境,但由于需要安装Python扩展 ...

  3. JS:逗号运算符

    逗号运算符: 会把逗号隔开的表达式全部执行 最后一个运行的表达式的结果就是逗号运算符的结果   例: var a = (1, 2, 3, 4, 5, 6); console.log(a); //6 隐 ...

  4. Python 中多线程共享全局变量的问题

    写在前面不得不看的一些P话: Python 中多个线程之间是可以共享全局变量的数据的. 但是,多线程共享全局变量是会出问题的. 假设两个线程 t1 和 t2 都要对全局变量g_num (默认是0)进行 ...

  5. 最小生成树 链式前向星 Prim&Kruskal

    Prim: Prim的思想是将任意节点作为根,再找出与之相邻的所有边(用一遍循环即可),再将新节点更新并以此节点作为根继续搜,维护一个数组:dis,作用为已用点到未用点的最短距离. 证明:Prim算法 ...

  6. Linux 批量杀死进程(详细版本)

    使用场景 当程序中有使用到多进程且进程数较多的情况,如下图,且需要通过控制台杀死所有的 GSM_run.py 的进程时,利用 kill 命令一个一个的去结束进程是及其耗时且繁琐的,这时就需要我们的ki ...

  7. 阈值PSI代码

    阈值PSI 若交集数量超过某个给定阈值时,允许分布式的各个参与方在自己集合中找到交集,且除了交集外,得不到其他额外信息. 实现论文: Multi-Party Threshold Private Set ...

  8. Solution -「COCI 2016-2017」 Mag 结论证明

    结论:最多包含一个 \(2\),并且不在链的两端点. 证明:我们问题分成两个 \(\texttt{pass}\). \(\texttt{pass 1}\):\(\forall u,s.t.x_{u}\ ...

  9. 向docker镜像中传递变量的两种方式

    测试用到的python文件: #!/usr/bin/env python3 #conding: utf-8 from http.server import HTTPServer, BaseHTTPRe ...

  10. YII页面缓存

    IndexController.php namespace frontend\controllers; use yii; use yii\web\Controller; class IndexCont ...