什么是ssm?如何使用ssm进行后端开发

news2024/11/13 18:26:08

目录

  • 一、ssm概述
    • 1.1 定义
    • 1.2 持久层框架 (mybatis&&mybatisPlus)
    • 1.3 Web 层框架 springMVC
    • 1.4 spring框架
  • 二、开发结构
    • 2.1 config介绍
    • 2.2 controller介绍
    • 2.3 dao介绍
    • 2.4 domain介绍
    • 2.5 exception介绍
    • 2.6 interceptor介绍
    • 2.7 service介绍
  • 三、注解开发介绍
    • 3.1 常见的注解
    • 3.2 部分注解使用的位置

一、ssm概述

1.1 定义

  • SSM框架是Java EE 领域内三大优秀框架的缩写,它们分别指的是 spring,springMVC,Mybatis 框架的简写。

1.2 持久层框架 (mybatis&&mybatisPlus)

  • Mybatis 是一个优秀的持久层框架。它采用的框架思想是ORM(对象关系映射),这也是大多数持久层框架采用的思想。何为ORM呢。说简单点ORM实现的功能就是把我们的Java 实体类也数据库的字段对应起来,可以快速的实现Java实体类字段封装到sql 语句,把数据库查询出来的结果集封装到Java实体类。例如,在mysql中,我们的数据定义假设为user_name,那么到了java中,我们就会使用驼峰命名法,这样是无法实现数据对应的。那么mybatis就完美的解决了这个问题
  • Mybatis是一个在Mybatis实现上的进一步封装,使得整个开发过程更加简便,例如,对于他来说,不需要书写Dao层的内容。当然,这虽然简化了一定的过程,但是很多时候对于复杂运用还是需要采用Mybatis去进行开发的。

1.3 Web 层框架 springMVC

  • spring MVC 是一个web 层的框架,它属于由spring 提供的web 层扩展,通过spring MVC 可以解决掉我们在利用 Servlet 原生API进行 web 模块编写时一个请求就要去对应一个Servlet 类的问题,也可以轻松的解决我们频繁手动进行参数绑定,视图映射等问题。spring MVC可以说极大的简化了我们web 功能模块重复代码的编写,使我们的单个 web 功能模块更加高内聚低耦合。

1.4 spring框架

  • 上面我们说了,spring 框架不属于三层架构的任意一层,它工作在整个三层架构,这是怎么回事?因为 spring ,它的核心在IOC 和 AOP,IOC代表的是一个Java bean 容器,通过IOC 可以实现 控制反转和依赖注入,如此我们不在需要手动去new 对象,统一把 Java 对象交由 IOC 容器进行管理加粗样式(依赖关系),解耦我们的程序,基于这一特性,也利于我们spring 整合各类框架实现业务开发。AOP 的主要通过反射家动态代理实现已有方法增强,减少冗余代码,常用来进行 事务管理也日志记录。基于spring 的优良特性也诞生了我们优秀的微服务框架spring Boot,通过spring Boot 我们可以高效进行框架整合(启动器start)。

二、开发结构

在这里插入图片描述

2.1 config介绍

  • Spring4 以后,官方推荐我们使用Java Config来代替applicationContext.xml,声明将Bean交给容器管理。
    在Spring Boot中,Java Config的使用也已完全替代了applicationContext.xml。实现了xml的零配置。所以无论从Spring的演进。其实就是用java类去代替了以前复杂的xml配置,实现简化开发。

2.2 controller介绍

  • controller即表现层,是实现和前端对接的重要部分(可以理解为过去在javaweb中学习的servlet部分),在现行springboot的这种方式,使得这一部分的代码书写简单易懂。前端发送的json数据能够很好的进行处理,也能够通过这里获取数据库内容。

2.3 dao介绍

  • dao层你可以理解为是具体的向数据库发送sql语句的部分,在mybatisPlus中这部分也是被省略的部分,因为mybatis已经帮我们封装好了一些基本的查询语句,我们只要添加对应依赖即可。

2.4 domain介绍

  • 用来定义用户的属性名以及提供getter,setter以及toString,构造方法等。通过对接Dao实现增删改查操作的返回。

2.5 exception介绍

  • 对于前期基础的开发,或许我们还能够直接地在service实现类中进行定义,但随着工程量的增大,会发现需要的错误越来越多,而且很多还存在很多的重合,因此,对与异常的输出封装就显得十分必要。

2.6 interceptor介绍

  • 这一部分可以称其为拦截器,用来实现拦截有点像(javaweb的filter),书写这里,我们能够实现某些操作,例如访问页面需要先登录等操作。作者在现行操作中使用其解决了jquery的数据拦截问题。

2.7 service介绍

  • 对于springboot开发来说,我们并不希望在我们实现某项功能时候还有大量的一些new操作以及判断操作,我们希望在我们实现某个方法的时候只需要通过创建上转型对象实现。因此,我们会在service层书写一个实现类用来对接Dao层的功能实现,然后通过service接口创建实现上转型。

三、注解开发介绍

3.1 常见的注解

  • @Controller

组合注解(组合了@Component注解),应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类,然后将web请求映射到注解了@RequestMapping的方法上。

  • @Service

组合注解(组合了@Component注解),应用在service层(业务逻辑层)

  • @Reponsitory

组合注解(组合了@Component注解),应用在dao层(数据访问层)

  • @Component

表示一个带注释的类是一个“组件”,成为Spring管理的Bean。当使用基于注解的配置和类路径扫描时,这些类被视为自动检测的候选对象。同时@Component还是一个元注解。

  • @Autowired

Spring提供的工具(由Spring的依赖注入工具(BeanPostProcessor、BeanFactoryPostProcessor)自动注入。)

  • @Configuration

声明当前类是一个配置类(相当于一个Spring配置的xml文件)

  • @ComponentScan

自动扫描指定包下所有使用@Service,@Component,@Controller,@Repository的类并注册

  • @Bean

注解在方法上,声明当前方法的返回值为一个Bean。返回的Bean对应的类中可以定义init()方法和destroy()方法,然后在@Bean(initMethod=”init”,destroyMethod=”destroy”)定义,在构造之后执行init,在销毁之前执行destroy。

  • @Value

值得注入。经常与Sping EL表达式语言一起使用,注入普通字符,系统属性,表达式运算结果,其他Bean的属性,文件内容,网址请求内容,配置文件属性值等等

  • @RunWith

这个是Junit的注解,springboot集成了junit。一般在测试类里使用:@RunWith(SpringJUnit4ClassRunner.class) — SpringJUnit4ClassRunner在JUnit环境下提供Sprng TestContext Framework的功能

  • @RequestMapping

用来映射web请求(访问路径和参数),处理类和方法的。可以注解在类和方法上,注解在方法上的@RequestMapping路径会继承注解在类上的路径。同时支持Serlvet的request和response作为参数,也支持对request和response的媒体类型进行配置。其中有value(路径),produces(定义返回的媒体类型和字符集),method(指定请求方式)等属性。

  • @RestController

组合注解,组合了@Controller和@ResponseBody,当我们只开发一个和页面交互数据的控制层的时候可以使用此注解。

  • @SpingBootApplication

SpringBoot的核心注解,主要目的是开启自动配置。它也是一个组合注解,主要组合了@Configurer,@EnableAutoConfiguration(核心)和@ComponentScan。可以通过@SpringBootApplication(exclude={想要关闭的自动配置的类名.class})来关闭特定的自动配置。

3.2 部分注解使用的位置

  • Controller,Service,Respontory应用位置,下面是位置对应

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • Autowired用来注入需要使用的对象,和value的使用有异曲同工之妙,value用来使用一个变量

在这里插入图片描述

  • SpringBootApplication

在这里插入图片描述

  • RestControllerh和ReqiuestMapper运用在Controller在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811906.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始学Flask: 3分钟用Python快速构建Web应用

文章目录 一、背景二、安装&基础使用1. 安装 Flask2. 创建 Flask 应用3. 路由解析4. 模板渲染5. 请求和响应处理 三、Demo项目实战 一、背景 什么是Flask?Flask 是一个轻量级的 Python Web 应用框架,因其简单易用、灵活性高等特点,可以帮…

Ribbon源码

学了feign源码之后感觉,这部分还是按运行流程分块学合适。核心组件什么的,当专业术语学妥了。序章:认识真正のRibbon 但只用认识一点点 之前我们学习Ribbon的简单使用时,都是集成了Eureka-client或者Feign等组件,甚至在…

better scoll右 联左

这是先拿一个数组装进我们所有 获取到的dom节点的 高度 因为算的 都是 到最上面的 高度,所以我们 要减去他的 高度 就得到自身的高度 然后给右边加一个滚动事件,得到每一次滑动的高度,在循环上面的数组,就是我们右边的 y就在算出…

如何排查 IDEA 自身报错?| 以 IntelliJ IDEA 2023.1.4 无法刷新项目 Maven 模块的问题为例

这个问题是 2023 年 7 月 26 日遇到的,当时还是 IDEA 2023.1.4,结果文章还没写完,7 月 27 日自动给更新了 IDEA 2023.2。问题估计解决了。 所以,本文就简单提一下 IDEA 自身报错的排查方法。 规避/解决方式 先说问题怎么处理&am…

重生之我要学C++第五天

这篇文章主要内容是构造函数的初始化列表以及运算符重载在顺序表中的简单应用,运算符重载实现自定义类型的流插入流提取。希望对大家有所帮助,点赞收藏评论,支持一下吧! 目录 构造函数进阶理解 1.内置类型成员在参数列表中的定义 …

糟了,数据库主从延迟了!

前言 在实际的生产环境中,由单台MySQL作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面 因此,一般来说都是通过集群主从复制(Master-Slave)的方式来同步数据&…

【点云处理教程】05-Python 中的点云分割

一、说明 这是我的“点云处理”教程的第 5 篇文章。“点云处理”教程对初学者友好,我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。 在上一教程中,我们看到了如何过滤点云以减少噪声或其密度。在本教程中,我们将应用一些聚…

LeetCode_11. 盛最多水的容器

题目描述 11. 盛最多水的容器 - 力扣(LeetCode)https://leetcode.cn/problems/container-with-most-water/ 思路分析 这题就是典型的是一道很经典的面试题,最优的解法是双指针,但很多人在第一次看到这题的时候很难想到用双指针来…

*CTF 2023 Misc

一、 snippingTools Alice在参加某个CTF比赛,她成功的解出了一道题,拿到了flag。她很开心,迫不及待地想要向Bob分享她的喜悦。于是按下了快捷键ShiftWinS使用了Windows 11的截图工具,截取了整个屏幕,并且保存为文件1.p…

无涯教程-jQuery - Spinner组件函数

Widget Spinner 函数可与JqueryUI中的窗口小部件一起使用。Spinner提供了一种从一组中选择一个值的快速方法。 Spinner - 语法 $( "#menu" ).selectmenu(); Spinner - 示例 以下是显示Spinner用法的简单示例- <!doctype html> <html lang"en"…

(树) 剑指 Offer 27. 二叉树的镜像 ——【Leetcode每日一题】

❓剑指 Offer 27. 二叉树的镜像 难度&#xff1a;简单 请完成一个函数&#xff0c;输入一个二叉树&#xff0c;该函数输出它的镜像。 例如输入&#xff1a; 4/ \2 7/ \ / \1 3 6 9镜像输出&#xff1a; 4/ \7 2/ \ / \9 6 3 1示例 1&#xff1a; 输…

给你一个项目,你将如何开展性能测试工作?

一、性能三连问 1、何时进行性能测试&#xff1f; 性能测试的工作是基于系统功能已经完备或者已经趋于完备之上的&#xff0c;在功能还不够完备的情况下没有多大的意义。因为后期功能完善上会对系统的性能有影响&#xff0c;过早进入性能测试会出现测试结果不准确、浪费测试资…

We are the Lights - 思维

分析&#xff1a; 每次操作会把上一次的状态覆盖&#xff0c;但是从后往前操作可以保留最后一次覆盖&#xff0c;每一个位置最后的覆盖状态一定是最终状态&#xff0c;因此可以存下来从后往前记录第一次覆盖的状态并计数。 代码&#xff1a; #include <bits/stdc.h>usi…

玩转LaTeX(一)【源文件基本结构、中文处理方法、中英文的字体字号设置、文档基本结构】

latex源文件基本结构&#xff1a; 【在latex中一般分为两个区&#xff0c;一个是导言区&#xff0c;一个是正文区&#xff08;文稿区&#xff09;】 %导言区(主要进行全局设置)%一个latex文件&#xff0c;只能有且只有一个document环境\documentclass{article} %除article类外…

OpenHarmony开源鸿蒙学习入门 - 基于3.2Release 应用开发环境安装

OpenHarmony开源鸿蒙学习入门 - 基于3.2Release 应用开发环境安装 基于目前官方master主支&#xff0c;最新文档版本3.2Release&#xff0c;更新应用开发环境安装文档。 一、安装IDE&#xff1a; 1.IDE安装的系统要求 2.IDE下载官网链接&#xff08;IDE下载链接&#xff09; …

【论文精读】Self-Attentive Assocative Memory,2020

目录 1 引言2 Outer product attention (OPA)3 Self-attentive Associative Memory (SAM)4 SAM-based Two-Memory Model (STM)4.1 M i M^i Mi写操作4.2 M r M^r Mr读操作4.3 M i M^i Mi读操作和 M r M^r Mr写操作过程4.4 用 M r M^r Mr实现item转移4.5 模型输出 o t o_t ot​…

C语言手撕顺序表

目录 一、概念 1、静态顺序表&#xff1a;使用定长数组存储元素。 2、动态顺序表&#xff1a;使用动态开辟的数组存储 二、接口实现 1、对顺序表的初始化 2、对数据的销毁 3、对数据的打印 4、检查是否需要扩容 5、尾插 6、头插 7、尾删 8、头删 9、在pos位置插入x …

数据集【NO.7】无人机航拍数据集——VisDrone2019数据集

写在前面&#xff1a;数据集对应应用场景&#xff0c;不同的应用场景有不同的检测难点以及对应改进方法&#xff0c;本系列整理汇总领域内的数据集&#xff0c;方便大家下载数据集&#xff0c;若无法下载可关注后私信领取。关注免费领取整理好的数据集资料&#xff01;本文数据…

【前端知识】React 基础巩固(四十)——Navigate导航

React 基础巩固(四十)——Navigate导航 一、Navigate的基本使用 新建Login页面&#xff0c;在Login中引入Navigate&#xff0c;实现点击登陆按钮跳转至/home路径下&#xff1a; import React, { PureComponent } from "react"; import { Navigate } from "reac…

MySQL数据库之JDBC编程(从认识到操作)

目录 前言 一.JDBC的认识 1.1JDBC的来源 1.2JDBC的概念 二.JDBC的导包 三.JDBC的四步操作 三.JDBC常用的类和方法 3.1常用类 3.2常见方法 &#x1f381;个人主页&#xff1a;tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主 &#x1f3a5; 本文由 tq02 原创&…