SSM整合(细节拉满)|将Mybatis、Spring、SpringMVC三个框架整合起来,通过一个demo来练习

news2025/6/11 8:43:07

环境要求

环境:
IDEA
MySQL 5.7.19
Tomcat 9
Maven 3.6
要求:
需要熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单的前端知识;

数据库环境

创建一个存放书籍数据的数据库表,并插入一些示例数据

SSM整合

新建一个空的Maven项目

导入相关依赖

将数据库与IDEA连接起来

把项目结构建立起来

applicationContext.xml、mybatis-config.xml

创建spring的配置文件applicationContext.xml和mybatis的核心配置文件mybatis-config.xml

database.properties文件用于数据库连接

创建database.properties配置文件,用于数据库的连接

mybatis-config.xml中加入类的位置,后面可简化一些操作。

在pom.xml中加入lombok依赖

创建一个与数据库表中字段对应的Books类

编写BookeMapper接口,定义一些相应的增删改查接口

创建BookeMapper.xml编写对应方法的sql语句

注册这个Mapper.xml

在mybatis-config.xml配置文件中注册这个Mapper.xml

编写Service层接口

编写Service层接口,增删改查方法与DAO层一致

编写Service层的具体实现类

编写Service层的具体实现类,实现刚才的接口,重写方法,用set方法能够方便注入Dao层的对应接口,然后每个方法中,实际上调用的还是Dao层接口的对应方法

spring跟dao层的配置文件spring-dao.xml

创建一个spring跟dao层的配置文件spring-dao.xml,右上角关联至我们原先创建的那个关联

然后将我们之前用来连接数据库的properties文件导入进来,连接池用c3p0,配置数据库账号密码之类的信息

配置dao接口扫包,动态的实现了Dao接口可以注入到Spring容器中! 

spring跟Service层的配置文件spring-service.xml

配置和扫描service下的包,将我们的所有业务类,注入到Spring,可以通过配置,或者注解实现

这里将刚才的Service层的实现类注册其中,然后通过set方法,将我们dao层的那个接口注入其中。

spring的核心配置文件applicationContext.xml中引入dao、service层的配置文件

在spring的核心配置文件applicationContext.xml中引入spring跟dao层的配置文件spring-dao.xml和spring跟Service层的配置文件spring-service.xml


整合SpringMVC

添加web支持

创建SpringMVC的配置文件spring-mvc.xml

spring的核心配置文件applicationContext.xml中也引入这个配置文件

在web.xml中配置DispatcherServlet、乱码过滤器以及session

注意这里绑定的spring-mvc.xml,应该改为applicationContext.xml,如果不改,有的bean找不到

在配置文件spring-mvc.xml配置映射器、适配器、视图解析器这些,以及扫描controller层的配置

环境配差不多了正式开启demo

查询全部书籍

编写Controller,查询全部书籍,返回到WEB-INF包下(此包下的页面只能通过controller或servlet来访问)的allBook.jsp页面-

在WEB-INF包下创建这个Controller返回的allBook.jsp页面

编写首页,写一个调用刚才的查询所有书籍的Controller路由的按钮

美化Controller返回的allBook.jsp页面

将Controller存在model中的所有书籍信息list列表用取出来

进首页点那个按钮再调用刚才的controller返回出allBook.jsp页面

增加书籍接口

在allBooke界面加入一个能跳转增加书籍的Controller路由的按钮“新增书籍”

编写跳转的这个Controller层,以及处理后的跳转页面

编写新增书籍页面

在这个页面里写一个能添加新书籍的表单,并准备编写这个表单提交后发给的Controller

编写表单提交后发给的路由

把表单输入的每个数据名与Books类的属性名对照,使得提交后,增加书籍的Controller可以直接接收到这些参数。

编写新增表单提交后发给的Controller,将信息增加到数据库中后,直接重定向到查所有书籍的Controller。

完成后试一试,添加一个书籍

提交后,发现重定向回查询所有书籍的页面,并且看到增加成功

修改书籍接口

在显示查询出所有书籍的页面,每本书的后面增加修改和删除按钮

在修改按钮上绑定一个执行修改操作的Controller的路由,并将该书籍的id当成参数传进去

编写这个跳转的Controller,将这个书籍的改之前的信息查到,存到model里,并跳转到真正要提交更改信息的updateBook.jsp的页面

创建这个updateBook.jsp页面

将这个页面里写一个表单,用来提交更改后的书籍信息,这里每个书籍的信息都默认赋值为原本的该id的这个书籍信息,是从我们刚才存的model里取出来的。

配置这个表单提交后所要执行修改书籍信息的Controller的路由

最重要的一点是,在提交这一系列修改书籍的信息前,还要将书籍的id,用一个隐藏域给加上,一起传过去,才能使得后面修改操作完成,不然没id,肯定修改不了这本书的信息。

编写这个Controller,修改信息过后,重定向到查询所有书籍的那个Controller,再通过这个Controller跳转至显示所有书籍的页面。

演示,点击编号为1书籍的修改操作

跳到提交修改信息的页面,在中间跳这个页面之前,还穿插了一个查询该id原本信息的Controller,然后才跳转至了这个页面,原本信息被赋值到了这里的每个属性里。

把书名改了,然后提交修改操作。

点修改后,这修改的信息以参数的形式,跳转到了修改信息的Controller,然后执行修改操作,重定向至查询所有书籍的Controller,再通过这个Controller跳转到了显示所有书籍的jsp页面。发现信息修改成功。

删除书籍接口

在显示所有书籍的jsp页面中的删除按钮前,绑定它所要跳转的执行删除书籍操作的Controller,并携带本书的id为参数。

编写这个Controller,然后再重定向至查询所有书籍的Controller,进而再跳转到显示所有书籍的jsp页面。

也可用restful风格

根据书名查书籍接口

在显示所有书籍的jsp页面中加一个根据书名查书籍的表单

绑定提交书籍名称后需要跳转执行根据书名查书籍信息的Controller路由。

Dao层在接口中新加这个根据书名查书信息的方法

在Mapper.xml编写该方法的对应sql

service层的接口中加入该方法

service层实现类中重写该方法

编写这个执行根据书名查书籍的Controller

如果没查到,需要返回,所以再显示所有书籍的jsp页面再加一个显示全部书籍按钮,绑定的还是查询所有书籍的那个Controller路由,方便回去。

书籍如果查不到,点这个按钮还能回去。

完善查询书籍的Controller,如果没查到书籍,在model里加一个error信息

返回后,如果model里有error信息会显示出来

至此,整合SSM框架以及写一个小的demo顺利完成!!!不容易!!!

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

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

相关文章

网安须知|什么是护网行动?什么是红蓝对抗?

01 什么是护网行动 护网行动是以公安部牵头的,用以评估企事业单位的网络安全的活动。 具体实践中,公安部会组织攻防两方,进攻方会在一个月内对防守方发动网络攻击,检测出防守方(企事业单位)存在的安全漏洞…

深入学习 Redis - 分布式锁底层实现原理,以及实际应用

目录 一、Redis 分布式锁 1.1、什么是分布式锁 1.2、分布式锁的基础实现 1.2.1、引入场景 1.2.2、基础实现思想 1.2.3、引入 setnx 1.3、引入过期时间 1.4、引入校验 id 1.5、引入 lua 脚本 1.5.1、引入 lua 脚本的原因 1.5.2、lua 脚本介绍 1.6、过期时间续约问题&…

OpenMMLab MMYOLO目标检测应用示例与常见问题(三)

基于MMYOLO的电离图实时目标检测基准 数据集 数字电离图是获取实时电离层信息的最重要方式。电离层结构检测对于准确提取电离层关键参数具有重要的研究意义。 本研究利用中国科学院在海南、武汉和怀来获得的4311张不同季节的电离图建立数据集。使用labelme手动注释包括 Laye…

实现高并发内存池(C++)

什么是内存池 池化技术 所谓“池化技术”,就是程序先向系统申请过量的资源,然后自己管理以备不时之需。之所以要申请过量的资源,是因为每次申请该资源都有较大的开销,不如提前申请好,这样使用时就会变得非常快捷&…

2023年华数杯数学建模C题母亲身心健康对婴儿成长的影响解题全过程文档及程序

2023年华数杯全国大学生数学建模 C题 母亲身心健康对婴儿成长的影响 原题再现: 母亲是婴儿生命中最重要的人之一,她不仅为婴儿提供营养物质和身体保护,还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况,如抑郁、焦虑、…

同为科技(TOWE)专业防雷滤波桌面PDU超级插座

2023年第19届杭州亚运会开幕在即,相较于以往,本届杭州亚运会的一大看点就是电竞项目将首次以正式比赛项目的身份亮相亚运赛场,让更多受众能够领略电竞的魅力。当前社会,电竞作为一种新兴的娱乐、社交方式,让很多年轻人…

Feign实战-Springboot集成OpenFeign Demo以及参数详解

最近整理一下微服务的文章,先拿一直用的OpenFeign开刀 思考:微服务之间如何方便优雅的实现服务间的远程调用 一、说说openFeign是什么吧? 说到这个,那不得不先说说RPC 1.什么是RPC RPC 全称是 Remote Procedure Call &#x…

程序员还在为兼职接单发愁,快看看这几个宝藏平台吧!!!

在当今经济发展压力巨大的背景下,总有人还在与生活顽强对抗,拿什么和生活对抗嘞,那当然只有马内咯,尤其是对于程序员而言,现在内卷严重,如果能做一点线上兼职搞点马内,那岂不美哉,如…

计算机毕业设计 基于SpringBoot餐厅点餐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Android ANR问题触发机制

1 Anr类型 ​ Anr一般有四种类型。 1.1 input dispatching timeout ​ 主要时按键或触摸屏事件在5s内没有响应。这个时间在ActivityManagerService中定义。 C:\Users\wangjie\AppData\Local\Android\Sdk\sources\android-32\com\android\server\am\ActivityManagerService.…

嵌入式学习 - 用电控制电

目录 前言: 1、继电器 2、二极管 3、三极管 3.1 特殊的三极管-mos管 3.2 npn类型三极管 3.3 pnp类型三极管 3.4 三极管的放大特性 3.5 mos管和三极管的区别 前言: 计算机的工作的核心原理:用电去控制电。 所有的电子元件都有数据手册…

window隐私保护设置(win10)

window隐私保护设置(win10) 1、文件夹选项中,把隐私模块中关于快速访问的选项√去掉 2、个性化中开始模块根据需要关闭需要的选项,最后一个可以关闭任务栏应用历史记录 小尾巴~~ 只要有积累,就会有进步

Multispectral and hyperspectral image fusion in remote sensing: A survey

遥感中的多光谱和高光谱图像融合:一项调查 把融合方法分为:全色锐化、基于分解、基于机器学习;总结了常用数据集和性能评估指标;提出未解决的问题绘制指导方针。 针对这一任务,有叫多光谱与高光谱融合、高光谱超分辨率、高光谱锐化、超锐化 全色锐化相关方法 HS和MS图像…

牛客网Verilog刷题 | 快速入门-基础语法

1、VL1 四选一多路器 描述 制作一个四选一的多路选择器,要求输出定义上为线网类型 状态转换: d0 11 d1 10 d2 01 d3 00 信号示意图: 输入描述: 输入信号 d1,d2,d3,d4 sel 类型 wire 输出描述: 输出信号 mux_ou…

抖音seo优化排名源码搭建

抖音seo优化排名技术开发源码搭建: 思路:看上去比较简单,貌似使用 get、set 这两个 trap 就可以,但实际上并不是。实际上还需要实现 has, ownKeys , getOwnPropertyDescriptor 这些 trap,这样就能最大限度的限制私有属…

语义分割——灰度图像转伪彩色图像

目录 检验灰度图检验代码 灰度图转伪彩色图代码转换代码使用细则 示例转换结果总结 检验灰度图 制作语义分割数据集或用训练好模型测试图像时,得到的结果是灰度图像,如下: 检验代码 上面图像灰度值不是全是全为0,灰度范围在[0…

接口测试工具Postman使用实践

一、接口定义 软件不同部分之间的交互接口。通常就是所谓的API――应用程序编程接口,其表现的形式是源代码。 —— [ 百度百科 ] 我们常说的接口一般指两种: (1)API:应用程序编程接口。程序间的接口 (2…

Docker与Kubernetes集成以实现云原生应用程序:云原生在线教育平台

文章目录 项目概述项目架构项目步骤项目收益 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:云计算 ✨文章内容:云原生在线教育平台 🤝希望作者的文…

【Zabbix】Zabbix结合WxPusher推送告警消息

WxPusher简单介绍 什么是WxPusher WxPusher (微信推送服务)是一个使用微信公众号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到微信上,无需安装额外的软件,即可做到信息实时通知。 你可以使用W…

【Spring Cloud系列】Feign详解与实战

Feign详解与实战 文章目录 Feign详解与实战一、概述二、什么是Feign三、Feign特性四、Feign简单使用3.1 Feign使用步骤3.2 Feign具体使用1. 引入依赖2. 启动类上添加注解3.编写FeignClient接口 五、使用Feign发起http请求5.1 Maven导入Feign配置,并集成Jackson5.2 F…