SSM整合的基本思路梳理

SSM整合的简单思路流程

基本思路

我在整合的时候一般习惯从MyBatis开始向上构建,也就是在开始一个项目的时候先将DAO层搭建起来,再向上整合Spring以及SpringMVC。按照这个流程,可以做出一个比较简单的大致流程作为参考,帮助我们在构建项目以及进行整合的时候有一个比较清晰的思路。

整合流程

1.创建MyBatis项目

我们以基于XML文件的开发为案例,基本的流程是大致相同的,无非就是使用配置文件或者使用注解的区别而已。

1.首先我们创建一个Maven项目,然后添加MyBatis框架。我们要先创建一个软件包,报名叫做com.Spring,我们所有的三层架构的软件包,或者是实体类的软件包都是在这个软件包下创建的。

2.之后我们需要将我们需要用到的依赖都导进我们的pom文件中,然后等待依赖刷新。

3.然后我们就可以开始正式的搭建MyBatis框架了,首先我们需要创建一个dao包,在com.spring包下面,以及创建一个结果集映射类的pojo包

4.然后我们开始编写mapper文件,以及我们的结果集映射类的文件。其实这样我们的MyBatis就已经搭建好了,但是我们的数据源对象和SqlSessionFaction对象是交由我们的Spring去管理的,所以我们暂时无法做测试,当我们整合Spring之后,我们就可以从容器中获取对象去进行测试了。

5.下一步,我们就是整合Spring文件,其实整合的过程就是将MyBatis所需要的数据源对象以及SqlSessionFaction对象和DAO层映射交给Spring的配置文件去管理。我们创建一个Spring的配置文件去将这些配置文件写入进去。

6.完成这一步之后,我们的MyBatis环境就已经搭建完成了,我们可以做一下MyBatis的单元测试,也就是我们可以在test文件夹中创建一个类,然后从容器中获取SqlSessionFaction的类,然后通过这个类获取Mapper接口的动态代理对象,通过动态代理对象调用方法,这时候我们是可以运行出来查询结果的。

到了这个阶段我们可以简单的看一下我们的项目文件结构:

我们的单元测试的结果也可以展示一下:

2.创建Spring部分

1.完成了MyBatis的配置文件之后,我们要再新建一个service包,并且我们再创建一个Spring自己的配置文件,去扫描service包下的控制器。

2.然后我们需要在Service包下面创建一个接口,这个接口中的方法可以和userMapper中的方法一样

3.然后在Service包下面,创建一个Impl包,用来存放实现service接口的类

4.我们在实现类中,使用自动注入的方式将userMapper接口注入进来。

这里需要说一下,因为我们注入的是一个接口,但是我们没有创建这个接口的实现类,所以这里在自动注入的时候时会报错的,这个报错是编译时报错,叫做找不到自动注入的类型。那么我们要知道,我们在MyBatis的配置中是配置了一个接口映射扫描的东西,那么这个东西在扫描到DAO包下面有接口之后,会自动的将这些接口实现,并将实现类注册到我们的容器中,这样在运行的时候就可以正常运行,这个报错可以不处理,如果是看着碍事,可以在IDE中将它改成警告。

5.我们在Service中调用DAO层的接口中的方法,然后将结果返回,然后我们的Spring整合MyBatis也就完成了,我们可以对这一块也进行一个单元测试,对Service的测试就比较复杂,他需要引入单元测试,并且引入配置文件。

我们可以看一下我们是如何进行测试的:

我们知道,当我们选中接口的类名然后点击ctrl+shift+t快捷键可以快速生成接口测试类,但是如果在这个地方你这么做了那么你就可能会导致一个错误叫做空指针异常,就是说你的userService没有正确的自动注入进去。如果你出现了这个错误,那就把上面的那个Test的注解的包名写对,他自己创建的Test的包名可能不适用于你的Spring版本。

然后我们就是可以运行测试,如果配置正确,那么我们就可以得到如下的结果:

红色的是日志啦,肯定不是警告。这样就完成了Spring整合MyBatis,接下来就是Spring整合SpringMVC的过程

Spring整合SpringMVC

这个整合的过程也是非常的简单,因为SpringMVC是Spring的子容器,所以他们只需要各自加载各自的配置文件即可,唯一需要有交集的地方就是需要在web.xml中配置一下读取Spring容器配置文件的标签。

1.首先我们要先添加web框架

2.我们在web.xml文件中需要先导入Spring的容器文件,也就是我们之前写的两个文件都要导入进来。然后继续添加前端控制器。

3.然后创建SpringMVC的配置文件,在这个配置文件中,我们要配置扫描controller包,以及配置注解驱动

4.然后我们创建controller包,然后在这个包下面创建控制器类,我们需要使用自动注入userService,然后我们在控制器类中调用userService。

5.我们查询的结果封装到JSP页面中返回到浏览器前端中。

至此我们就完成了SSM的整合的基本流程的梳理

我确实没有写我们用到的具体的类,以及我们具体的操作,流程主要辅助,还是多练手感,不用看流程也就知道了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[MySQL]基本数据类型及表的基本操作

一、常用的数据类型 1.1 数据库表的列类型 数值 1 2 3.14 tinyint 十分小的数据 1个字节smallint 较小的数据 2个字节mediumint 中等大小的数据 3个字节int 标准的整数 4个字节big 较大的数据 8个字节float 浮点数 4个字节double 浮点数 小数 8个字节(精度问题&am…

JSON的用法和说明

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。 JSON建构于两种结构: "名称/值"对的集合。理解为对象 值的有序列表。理解为数组 JSON具有以下这些形式: 对象是一个无序的“ ’名称/值‘ 对”集合。一个…

【排序】快速排序(递归和非递归)

快速排序 前言图解大致思路对于hoare版本对于挖坑法对于前后指针法 实现方法递归非递归 快排的优化(基于递归的优化)三数取中法小区间优化 时间复杂度和空间复杂度 前言 快速排序,听名字就比较霸道,效率根名字一样,非…

永久免费内网穿透不限制速度

市面上的免费内网穿透大都有格式各样的限制,什么限制流量啊,每个月要签到打卡啊,还有更改域名地址等,只有神卓互联内网穿透是永久免费没有限制的,白嫖也可以。 这篇文章分享了3个方案,按照性能和综合指标排…

项目驱动的编写

驱动代码直接使用nfs传输,设备树直接在开发板中修改设备树文件 1、修改好设备树,在内核顶层make dtbs ,然后替代tftp目录中的设备树文件 2、使用内核源码编译生成驱动程序,然后传送到开发板中,使用insmod动态加载 LCD驱动 1、初始…

从零学习SDK(7)如何打包SDK

打包SDK的目的是为了方便将SDK提供给其他开发者或用户使用,以及保证SDK的兼容性和安全性。打包SDK可以有以下几个好处: 减少依赖:打包SDK可以将SDK所需的库、资源、文档等打包成一个文件或者一个目录,这样就不需要用户再去安装或…

ArduPilot开源飞控系统之简单介绍

ArduPilot开源飞控系统之简单介绍 1. 源由2. 了解&阅读2.1 ArduPilot历史2.2 关于GPLv32.3 ArduPilot系统组成2.4 ArduPilot代码结构 3. 后续4. 参考资料 ArduPilot是一个可信赖的自动驾驶系统,为人们带来便利。为此,提供了一套全面的工具&#xff0…

读SQL进阶教程笔记12_地址与三值逻辑

1. SQL和数据库都在极力提升数据在表现层的抽象度,以及对用户隐藏物理层的概念 2. 关系模型是为摆脱地址而生的 2.1. “地址”不仅包括指针操作的地址,还包括数组下标等 3. 一个优雅的数据结构胜过一百行杂耍般的代码 3.1. 精巧的数据结构搭配笨拙的…

Spring MVC 的调用(12)

目录 SpringMVC流程 源码分析 第一步:用户发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者…

高效部署Redis Sentinel模式(哨兵模式),手把手教学

Redis Sentinel模式部署 前言一、服务器部署同版本的redis1、换软件源在yum拉取包的时候启用remi源 二、修改配置文件1.修改/etc/redis.conf2.配置/etc/redis/sentinel.conf 三、启动redis服务1、启动服务2、连接redis3、检查redis 前言 这里就不过多的解释高可用的好处了&…

CRM系统是什么?它有什么作用?

CRM系统是什么? CRM是Customer Relationship Management(客户关系管理)的缩写,是一种通过对客户进行跟踪、分析和管理的方法,以增加企业与客户之间的互动和联系,提高企业与客户之间的互信,从而…

基于 VITA57.4 标准的 8 路 500MSPS/1GSPS/1.25GSPS 采样率 14 位 AD 采集 FMC 子卡模块

板卡概述 FMC148 是一款基于 VITA57.4 标准的 JESD204B 接口 FMC 子卡模块,该模块可以实现 8 路 14-bit、500MSPS/1GSPS/1.25GSPS ADC 采集功能。该板卡 ADC 器件采用 ADI 公司的 AD9680 芯片,全 功率-3dB 模拟输入带宽可达 2GHz。该 ADC 与 FPGA 的主机接口通 …

Revit相关问题:符号线,转转问题,生成三维视图

一、Revit符号线如何画粗一些?如何自定义符号线子类别? 1、Revit在族里面符号线的粗细、显示颜色、显示线型为符号线的子类别控制! 你可以通过,管理选项卡新建子类别,然后在画符号线的时候应用该子类别! 新建符号线对象样式 应用子类别 二、Revit三维模…

背包问题——01背包|完全背包

目录 前言&背包问题的历史 01背包 1、题目 2、暴力解01背包 Ⅰ、代码 3、动态规划解01背包 Ⅰ、二维dp数组解01背包 1)dp数组的含义 2)递推公式 3)dp数组的初始化 4)遍历顺序的讨论 5、代码 Ⅱ、一维数组解01背包 1&…

C#调用C++封装的SDK库(dll动态库)——上

C#调用C封装的SDK库(dll动态库)——上 一、C封装库 通过前几篇文章,我们封装了C的动态DLL库,有Qt版的,有C版的,当然还有介绍了Pimpl模式在SDK封装中的使用: Qt创建SDK VS创建SDK Pimple在SDK封装中的应用 但是&a…

RabbitMQ入门

AMQP AMQP(Advanced Message Queuing Protocol,高级消息队列协议) 是进程之间传递异步消息的网络协议。 AMQP工作过程 发布者(Publisher)发布消息(Message),经过交换机(Exchange),交换机根据路由规则将收到消息分发给交换机绑定的队列(Queue),最后AM…

二维数组的总结

一、时间复杂度和空间复杂度 时间复杂度和空间复杂度是衡量算法效率的两个重要指标。时间复杂度是指算法执行所需的时间,而空间复杂度是指算法执行所需的内存空间。 计算时间复杂度和空间复杂度需要分析算法中各个操作的执行次数和内存使用情况。具体的计算方法可以…

亚马逊、ebay、temu如何提升产品点击率?测评自养号解析

产品点击率对于店铺销售额的影响至关重要,尤其是在竞争越来越激烈的市场环境中,想要有销量和转化,提高产品listing点击率成为了非常关键的一环。 1. 产品主图 顾客浏览产品时,第一眼看到的就是主图,一张优质的主图更容…

CSDN博客编写教程

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

UniLM模型简单介绍

目录 一、概要 二、深入扩展 2.1 预训练任务 2.2 模型精调 一、概要 如果将基于Transformer的双向语言模型(如BERT模型中的掩码语言模型)与单向的自回归语言模型(如BART模型的解码器)进行对比,可以发现&#xff0c…