SSM框架原理以及流程

article/2025/11/10 23:58:43

SSM框架原理以及流程

  • 一:原理
  • 二:开发流程
    • 1.新建maven项目
    • 2.配置整合文件
      • 2.1 配置pom.xml文件---引入依赖
      • 2.2 配置web.xml文件
      • 2.3 配置springmvc
      • 2.4 配置mybatis
    • 3.java代码---测试

一:原理

1.springmvc:
1).客户端发送请求到DispacherServlet(分发器)

2).由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller

3).Controller调用业务逻辑处理后,返回ModelAndView

4).DispacherSerclet查询视图解析器,找到ModelAndView指定的视图

5).视图负责将结果显示到客户端

2.spring

平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们Java中的类,当然也包括service dao里面的),有了这个机制,我们就不用在每次使用这个类的时候为它初始化,很少看到关键字new。另外spring的aop,事务管理等等都是我们经常用到的。

3.Mybatis

mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

4.各项作用:

SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层

使用spring MVC负责请求的转发和视图管理

spring实现业务对象管理,mybatis作为数据对象的持久化引擎

二:开发流程

1.新建maven项目

在这里插入图片描述

2.配置整合文件

2.1 配置pom.xml文件—引入依赖

 <properties><project.spring.version>5.3.9</project.spring.version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${project.spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${project.spring.version}</version><scope>test</scope></dependency><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.32</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.4</version></dependency></dependencies>

2.2 配置web.xml文件

在这里插入图片描述

 <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/mybatis/spring-*.xml</param-value></context-param><!-- 启动业务loc容器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 启动mvc容器 --><servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><!-- springmvc文件位置 --><param-value>classpath:spring/mvc/springmvc-*.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/*</url-pattern></servlet-mapping>

2.3 配置springmvc

在这里插入图片描述

  <!-- 扫描位置 --><context:component-scan base-package="com.dyit.ssm.entity"/><!-- 静态资源放行 --><mvc:resources location="static/" mapping="static/**"/><!-- 驱动注解 --><mvc:annotation-driven/>

2.4 配置mybatis

1).配置spring-mybatis.xml
在这里插入图片描述

   <!-- 管理范围 --><context:component-scan base-package="com.dyit.ssm"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>      </context:component-scan><context:property-placeholder location="classpath:spring/mybatis/druid/druid.properties"/><!-- 数据源 --><bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource"><property name="url" value="${druid.url}" /><property name="username" value="${druid.username}" /><property name="password" value="${druid.password}" /><property name="driverClassName" value="${druid.driver}" /></bean><!-- 容器创建SqlSessionFactory --><bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="typeAliasesPackage" value="com.dyit.ssm.entity"/><property name="mapperLocations" value="classpath:spring/mybatis/mapper/*.mapper.xml"/></bean><!-- 配置接口 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.dyit.ssm.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean><!-- 事务 --><bean id="txManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 让spring管理起来 --><tx:annotation-driven transaction-manager="txManger"/>

2).配置druid.properties 数据源(数据库相关配置)
在这里插入图片描述

druid.url=jdbc:mysql://192.168.1.8:3306/book_db?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
druid.username=root
druid.password=12345
druid.driver=com.mysql.cj.jdbc.Driver

3.配置Book.mapper.xml(数据库的映射类)

在此我以数据库的 增删改查 为例
在这里插入图片描述

<mapper namespace="com.dyit.ssm.mapper.IBookMapper"><sql id="findAllBook">SELECT * FROM book_tab</sql><resultMap type="Book" id="BookMap"><id property="id" column="book_id" /><result property="title" column="book_title" /><result property="price" column="book_price" /><result property="author" column="book_author" /></resultMap><insert id="save">INSERT INTO book_tab(book_title,book_author,book_price)VALUES(#{title},#{author},#{price})</insert><delete id="deleteById">DELETE FROM book_tab WHERE book_id=#{id}</delete><insert id="update">UPDATE book_tab SET book_title=#{title},book_author=#{author},book_price=#{price}WHERE book_id=#{id}</insert><select id="findAll" resultMap="BookMap"><include refid="findAllBook" /></select></mapper>

3.java代码—测试

1)写实体类
在这里插入图片描述

@Alias("Book")  //别名
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {private Integer id; //idprivate String title;  //书名private double price;  //价格private String author;  //作者}

2)写mapper类–对数据库的操作接口
在这里插入图片描述

@Mapper
public interface IBookMapper {void save(Book book);  //添加void deleteById(int id); //根据id删除void update(Book book); //修改List<Book> findAll(); //全查询
}

3)写service接口
在这里插入图片描述

public interface IBookService {void save(Book book);  //添加void deleteById(int id); //根据id删除void update(Book book); //修改List<Book> findAll();}

4)写service接口的实现类
在这里插入图片描述

@Service
public class BookServiceImpl implements IBookService{@Autowiredprivate IBookMapper mapper; //注入mapper@Overridepublic void save(Book book) { mapper.save(book);}@Overridepublic void deleteById(int id) {mapper.deleteById(id);}@Overridepublic void update(Book book) {mapper.update(book);}@Overridepublic List<Book> findAll() {return mapper.findAll();}}

5)写service测试类
在这里插入图片描述

@RunWith(SpringJUnit4ClassRunner.class) //测试注解
@ContextConfiguration(locations = "classpath:spring/mybatis/spring-mybatis.xml") //控制文件路径
public class ssmTest {@Autowiredprivate IBookService ibs;  //注入service@Testpublic void testSave() {  //添加ibs.save(new Book(4, "西游外传", 66.66, "孙悟空"));}@Testpublic void testDeleteById() {  //删除ibs.deleteById(2);;}@Testpublic void testUpdate() {  //修改ibs.save(new Book(4, "西游前传", 88.66, "唐三藏"));}@Testpublic void testFindAll() {  //全查询System.out.println(ibs.findAll());}}

6.以添加图书为例查看测试结果展示
在这里插入图片描述
注:因没有写日志配置类,故报红
在这里插入图片描述
成功添加进数据库


http://chatgpt.dhexx.cn/article/WusKG5Y1.shtml

相关文章

SSM框架架构,原理及整合流程(eclipse)

SSM框架整合 一.SSM框架1.1SSM四个分层架构的作用与联系1.2 SSM框架原理 二.SSM框架整合流程2.1SSM框架整合后完成一个功能的步骤 一.SSM框架 SSM&#xff1a;spring MVC &#xff0c;spring和mybatis框架的整合&#xff0c;是标准的MVC模式&#xff0c;将整个系统划分为view层…

SSM框架的原理和运行流程

SSM框架的工作原理及运行流程 SSM框架简介SpringMVCSpringMybatis参考文章 SSM框架简介 SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架集由Spring、MyBatis两个开源框架整合而成&#xff08;SpringMVC是Spring中的部分内容&#xff09;。SSM常作为数据源较简单的web…

完全二叉树与满二叉树的区别+计算二叉树深度

1、完全二叉树与满二叉树的区别&#xff1a; 满二叉树&#xff1a;深度为k且有2^k-1个结点的二叉树称为满二叉树。 完全二叉树&#xff1a;设二叉树的深度为h&#xff0c;除第 h 层外&#xff0c;其它各层 (1&#xff5e;h-1) 的结点数都达到最大个数&#xff0c;第 h 层所有…

数据结构—二叉树深度优先遍历

二叉树是一种常见的数据结构&#xff0c;理解二叉树对于理解AVL树、红黑树都有重要意义&#xff0c;索性再重新梳理一下思路&#xff0c;加深印象。本文重点介绍二叉查找树。 1.二叉树与二叉查找树 二叉树&#xff08;binary tree&#xff09;是树的一种特殊形式&#xff0c;…

4.13每日一题之二叉树深度(洛谷c++)|dfs遍历树

&#x1f344;前言 大家好哇&#xff0c;我是一勺黑猫。今天是每日一题的第十三天&#xff0c;欢迎更多小伙伴加入到我们的打卡计划中&#xff0c;希望和你们在学习算法的路上一起进步~ &#x1f64e;作者简介&#xff1a;一个正在努力学算法和后端的大三girl ⏳每日一题打卡地…

二叉树深度优先搜索算法

题目&#xff1a; 输入一颗二叉树和一个整数&#xff0c;打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 思路分析&#xff1a; 是图形相关的算法。首先考虑解决图形相关的广度搜索优先算法就是深度搜…

leetcode104---求二叉树深度

leetcode104—求二叉树深度 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 思路 对于二叉树深度问题&#xff0c;深度为左右子树深度最大值加1 depth max(left_depth, right_depth)1二叉树问题考虑递归方法&…

二叉树深度优先遍历-递归实现

二叉树深度优先遍历的递归实现 一、深度优先遍历二、先序遍历1.算法思路2.代码实现 三、中序遍历1.算法思路2.代码实现 四、后序遍历1.算法思路2.代码实现 一、深度优先遍历 对每一个可能的分支路径深入到不能再深入为止&#xff0c;而且每个结点只能访问一次。 要特别注意的是…

二叉树深度和高度_二叉树的高度和深度

二叉树深度和高度 In this tutorial, we will learn how to find height and depth of binary tree with program implementation in C++. It is one of the most commonly used non-linear data structures. We will learn about: 在本教程中,我们将学习如何使用C ++中的程序…

【数据结构】计算二叉树深度完整C语言代码

【数据结构】二叉树深度的计算 二叉树的深度计算完整代码展示程序结果 二叉树的深度计算 我们先看一个深度为3的二叉树。想求得此二叉树深度&#xff0c;先计算左孩子深度&#xff0c;再计算右孩子深度&#xff0c;比较得出最大值&#xff0c;即二叉树深度。 通过先序序列键盘…

Golang 二叉树系列【二叉树深度】

题目 输入一棵二叉树的根节点&#xff0c;求该树的深度。从根节点到叶节点依次经过的节点&#xff08;含根、叶节点&#xff09;形成树的一条路径&#xff0c;最长路径的长度为树的深度。 题目示例 例如&#xff1a; 给定二叉树 [3,9,20,null,null,15,7] 3/ \9 20/ \15 …

二叉树深度优先遍历解题思路

文章目录 1.二叉树深度优先遍历解题思路1.1.三种深度优先遍历的方式1.2.深度优先遍历的启示1.2.1.递归形成条件1.2.2递归过程的实际工作顺序1.2.2.1.单路递归的实际工作顺序1.2.2.2. 双路递归的实际工作顺序 1.2.3.三种深度优先遍历给我们的启示是什么&#xff1f; 1.3.深度优先…

[剑指Offer]-二叉树的深度

题目描述&#xff08;一&#xff09; 输入一棵二叉树的根结点&#xff0c;求该树的深度。从根结点到叶结点依次经过的结点&#xff08;含根、叶结点&#xff09;形成树的一条路径&#xff0c;最长路径的长度为树的深度。例如下图中的二叉树的深度为4&#xff0c;因为它从根结点…

二叉树的高度和深度定义、回溯(个人学习记录)

1.二叉树的高度和深度定义 &#xff08;对某个节点来说&#xff09;深度是指从根节点到该节点的最长简单路径边的条数&#xff1b;高度是指从最下面的叶子节点到该节点的最长简单路径边的条数&#xff1b; &#xff08;对二叉树&#xff09;深度是从根节点数到它的叶节点&…

二叉树之二叉树的深度

1.二叉树的max deep 1. 高度与深度 二叉树的高度: 任意一个节点到叶节点的max距离 深度: 任意一个节点到根节点的max距离 求深度: 后续 left right mid 先求子节点的深度,1即为父节点深度 求高度 lef mid right 1 1 1逼近高度 2.求高度 1.递归思路 1max(left,right) 递归函…

二叉树的深度

二叉树的深度计算 1、一颗树只有一个节点&#xff0c;它的深度是1&#xff1b; 2、二叉树的根节点只有左子树而没有右子树&#xff0c;那么可以判断&#xff0c;二叉树的深度应该是其左子树的深度加1&#xff1b; 3、二叉树的根节点只有右子树而没有左子树&#xff0c;那么可…

计算二叉树深度算法(递归、非递归)入门详解

一、引言 二叉树在应用时&#xff0c;经常需要知道二叉树的深度。二叉树的深度就是二叉树的层数&#xff0c;即从树根算起&#xff0c;到最底下一层的层数是多少&#xff0c;即二叉树中结点的最大层次值。 本文给出了计算二叉树深度的算法&#xff0c;包括递归算法和非递归算法…

计算二叉树的深度

[算法步骤] 如果是空树&#xff0c;递归结束&#xff0c;深度为0&#xff1b;否则执行一下操作 递归计算左子树的深度计为m;递归计算右子树的深度计为n;如果m大于n&#xff0c;二叉树的深度为m1&#xff0c;否则为n1&#xff1b; [算法描述] int Depth(BiTree T) {int m, n…

CreateDialog

使用对话框模版资源创建一个非模态对话框。 CreateDialog调用 CreateDialogParam 函数。 调用语序&#xff1a; HWND CreateDialog(HINSTANCE hInstance,LPCTSTR lpTemplate,HWND hWndParent,DLGPROC lpDialogFunc); 参数 hInstance类型&#xff1a;HINSTANCE 对话框模版…

android 使用showDialog调用相应的对话框

在Activity下调用此函数 showDialog(10); 然后重写以下函数 protected Dialog onCreateDialog(int id) {// TODO Auto-generated method stubswitch(id){case 10:return new AlertDialog.Builder(Activity13.this).setTitle(getString(R.string.title)).setMessage(getString(…