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

2023-09-20 21:49:19

环境要求

环境:
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顺利完成!!!不容易!!!

更多推荐

【操作系统笔记】任务调度&信号处理&CPU上下文

任务调度何时需要调度执行一个任务?第一:当任务创建的时候,需要决定是继续执行父进程,还是调度执行子进程第二:在一个任务退出时,需要做出调度决策,需要从TASK_RUNNING状态的所有任务中选择一个任务来执行第三:当一个任务阻塞在I/O上,或者因为其他原因阻塞,必须调度另一个任务执行第四:在一个I/O中断发生时,必须做

Docker网络学习

文章目录Docker容器网络1.Docker为什么需要网络管理2.Docker网络简介3.常见的网络类型4.docker网络管理命令5.两种网络加入差异6.网络讲解dockerBridge网络dockerHost网络dockerContainer网络dockernone网络Docker容器网络1.Docker为什么需要

Redis 面霸篇:从高频问题透视核心原理

Redis为什么这么快?很多人只知道是K/VNoSQl内存数据库,单线程……这都是没有全面理解Redis导致无法继续深问下去。这个问题是基础摸底,我们可以从Redis不同数据类型底层的数据结构实现、完全基于内存、IO多路复用网络模型、线程模型、渐进式rehash…...到底有多快?我们可以先说到底有多快,根据官方数据,

设计模式解析之模板方法模式:设计灵活可扩展的算法框架

目录1.引言2.概要2.1概念2.2结构2.3类图2.4工作流程3.应用场景3.1适用情况:3.2常见例子:4.代码衍化过程初版:甲乙学生都抄试卷第二版:提炼代码第三版:抽象出算法骨架第四版:模板方法变化过程总结及未来展望5.总结1.引言在软件开发中,设计和实现算法是一项常见的任务。然而,随着需求的变化和代码的增长,算

十二、MySql的事务(下)

文章目录一、事务隔离级别(一)如何理解隔离性(二)隔离级别1.读未提交【ReadUncommitted】:2.读提交【ReadCommitted】:3.可重复读【RepeatableRead】:4.串行化【Serializable】:(三)查看与设置隔离性1.查看全局隔离级别2.查看会话(当前)全局隔离级别3.设置全局

C++ - AVL 树 介绍 和 实现 (上篇)

前言之前我介绍了二叉搜索树,可看一下博客:C++-搜索二叉树_chihiro1122的博客-CSDN博客二叉搜索树的效率可以达到O(logn)。这个复杂度的算法的效率是非常恐怖的,2的30次方大概是10亿左右。也就是说如果用暴力查找需要找10亿次,而最好的效率的二叉搜索树只用搜索30次。是非常恐怖的。为什么说是最好效率

如何连接到远程桌面

远程桌面连接是一个非常有用的工具,尤其是当越来越多的人在家工作或使用自己的设备工作时。使用远程桌面连接软件,管理员即使不在您的设备附近,也可以解决问题,他们可以远程访问它并快速解决可能出现的任何问题。什么是远程桌面连接远程桌面连接是一种远程操作电脑的模式,它可以用于可视化访问远程计算机的桌面环境,用于管理员在客户机上对

找不到msvcp140.dll的解决方法,以及msvcp140.dll丢失的原因

在计算机使用过程中,我们可能会遇到无法启动程序的问题,提示找不到msvcp140.dll。这使得许多用户感到困扰,因为msvcp140.dll是MicrosoftVisualC++Redistributable的一个组件,它包含了C++运行时库。这个库对于许多应用程序和游戏来说都是必需的。那么,为什么会出现找不到msv

Spring MVC 请求参数绑定

文章目录默认⽀持ServletAPI作为⽅法参数绑定简单类型参数绑定Pojo类型参数绑定⽇期类型参数(需要配置⾃定义类型转换器)路径变量参数SpringMVC是一个用于构建Web应用程序的框架,它提供了一种方便的方式来处理HTTP请求和响应。在SpringMVC中,请求参数绑定是将HTTP请求中的参数映射到控制器方法的

Spring MVC 请求映射路径的配置,实现前后端交互

目录一、什么是请求映射路径二、SpringMVC的请求参数三、日期类型的参数传递四、SpringMVC如何响应JSON数据一、什么是请求映射路径在SpringMVC中,请求映射路径(RequestMappingPath)是指与特定的请求处理方法关联的URL路径。通过在SpringMVC的控制器类上使用注解(如@Requ

IP代理安全吗?如何防止IP被限制访问?

你是否遇到过可以正常上网,但访问某个网站却被禁止?注册某个网站账号,却被封号?那都是因为IP出现问题!您的IP地址透露很多关于您的信息,包括您的位置和互联网活动。在本文中,我们将一起了解IP地址,网站如何利用它来跟踪您,以及与IP代理如何帮助您更好的推进业务。什么是IP地址?IP地址是互联网协议地址(InternetP

热文推荐