SSM框架详解_ssm框架内容-程序员宅基地

技术标签: java  web  ssm  

SSM框架详解

写在前面:当初整理SSM原理时,参考了网上一些前辈的文章,时间久远已经忘记来源,所以文中原理部分如有侵权请联系我删除。

基于SSM框架的仿天猫商城网站+电商后台管理系统

本文视频讲解

一、项目结构

项目结构

src/com.jingmall

base基类
controller、service、serviceImpl、dao都要继承此基类

po/entity实体类
实体类,定义对象的属性和get、set等方法。一般,一个实体类对应数据库里的一张表。
管理员实体类数据库中的管理员表
service业务层
Service层的业务实现,具体要调用到已定义的DAO层的接口。为controller层提供服务,接受控制层的参数,完成相应的功能,并返回给controller。
在这里插入图片描述在这里插入图片描述
mapper/dao持久层
主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,Mapper.java:定义要对数据库进行的操作,比如 insert、delete、update、listAll等方法。
在这里插入图片描述
Mapper.xml:将Mapper.java中的方法按照id映射成sql。
在这里插入图片描述
controller控制器
连接页面请求和服务器,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
在这里插入图片描述

WebRoot

在这里插入图片描述
resource存放静态资源文件,如一些前端文件,css、js、图片等。

WEB-INF/jsp是前端页面,对应MVC中的V,视图。
在这里插入图片描述
web.xml是JavaWeb项目的入口文件。

pom.xml

Maven通过pom.xml配置,引入项目所需要的jar包。

二、SSM框架原理

SpringMVC

SSM框架是Spring MVC + Spring + MyBatis框架的整合。
使用Spring MVC负责请求的转发和视图管理;Spring实现业务对象管理;MyBatis作为数据对象的持久化引擎。

DAO层(mapper):主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此
1、DAO层的设计首先是设计DAO的接口,
2、然后在Spring的配置文件中定义此接口的实现类,
3、然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,
4、DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。

Service层:主要负责业务模块的逻辑应用设计。
1、首先设计接口,再设计其实现的类
2、接着再在Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。
3、Service层的业务实现,具体要调用到已定义的DAO层的接口,
4、封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。

Controller层:负责具体的业务模块流程的控制
1、在此层里面要调用Service层的接口来控制业务流程,
2、控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。

View层:此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示。

各层联系
1、DAO层,Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势

2、Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。

3、Service逻辑层设计
Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。

Spring

spring是一个容器框架,它可以接管web层,业务层,dao层,持久层的各个组件,并且可以配置各种bean, 并可以维护bean与bean的关系,当我们需要使用某个bean的时候,我们可以直接getBean(id),使用即可。

Spring目的是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象) ,Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。

MyBatis

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

三、管理员登录实例

LoginController.java
在这里插入图片描述在这里插入图片描述

@Controller使用注解,这样spring mvc可以扫描并识别到它,这个配置可以在com.jingmall/spring/springmvc.xml里找到
@RequestMapping("/login")解析前端的url,找到相应的控制器
在这里插入图片描述
@RequestMapping(“login”)解析前端的url,找到相应的管理员登录入口方法
在这里插入图片描述
login()方法返回一个路径字符串"/login/mLogin",这个路径指向项目里的某个jsp页面,jsp文件根目录/WEB-INF/jsp/,以及文件后缀.jsp,在指定时都可以省略都省略

mLogin.jsp
引入了很多css样式,这些是美工做好的,不是后端开发者的任务,我们需要重点关注表单form里的内容,用户名的输入是文本类型,给这个文本里的数据起个名字name,这个相当于前后端数据交互的依据,是必填的。密码的输入是密码类型的。登录按钮是提交类型,点击登录会提交表单,发送一次请求。

简单来说,管理员登录入口方法只做了一件事,就是把jsp页面渲染出来

看回LoginController.java,继续看下一个方法,管理员登录验证checkLogin()
在这里插入图片描述
传进来的参数是一个Manager类型的对象,所以需要先写Manager实体类

Manager.java (/com.jingmall/po)
Manager实体类对应数据库里的Manager表

调用ManagerService里的getByEntity(manager)方法,参数和返回类型是一个Manager实体类对象。
宏观上说,这个方法要做的事情是通过对象查询manager表并返回这个实体对象。比如我们在登录页面输入用户名和密码,前端页面提交数据到后端,后端实例化一个manager实体类对象,把用户名和密码赋值给这个对象,因为只提交了用户名和密码的数据,所以这个manager对象的realName属性值为null,通过调用一系列的接口最终到达数据库进行查询,如果查得到,就将整条记录赋给这个对象,这时管理员对象的真实姓名这个属性就变得有值了。
详细理解下这中间一系列调用接口的过程,controller通过调用service层的接口,找到dao层对应的接口,在dao层完成跟数据库的交互,实现数据落地。
在这里插入图片描述
service里的getByEntity()接口,这个接口的实现类在serviceImpl.java里
在这里插入图片描述
这个方法做的事情是返回BaseDao里的getByEntity()接口,虽然方法的名字都是getByEntity(),但它们所在层次不一样,每个层次负责的事情是不一样的,当然这些方法名可以不一样,用到的时候指明就行。再看dao层的getByEntity()接口
/BaseDao.java/
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45067481/article/details/122878311

智能推荐

Java中格式化输出_java中什么是格式输出-程序员宅基地

文章浏览阅读2k次。 int printf(const char *format,[argument]);  format 参数输出的格式,定义格式为:  %[flags] [width] [.perc] type  规定数据输出方式,具体如下: 1.type 含义如下: %d 十进制整数 159 %x 十六进制数 9f%o 八进制数 ..._java中什么是格式输出

java组装树状结构数据集合_java构建树,构建tree,组装树结构,通用算法,用到递归算法...-程序员宅基地

文章浏览阅读551次。请跟着main方法走,然后看代码注释。package hesuangyan.com.testtree;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Map.E..._java 树形节点集合组合算法

获取财经数据神器akshare 基本使用总结-程序员宅基地

文章浏览阅读2.4w次,点赞26次,收藏64次。AkShare是基于 Python 的开源数据接口库,目的是实现对期货、期权、基金等衍生金融产品和另类数据从数据采集、数据清洗加工,、到数据下载的工具,满足金融数据科学家,数据科学爱好者在数据获取方面的需求。AkShare的特点是获取的是相对权威的财经数据网站公布的原始数据,通过利用原始数据进行_akshare

实现sum(1)(2)(3).valueOf(),实现这么一个sum函数,返回6_sum(1)(2)(3) 输出 6-程序员宅基地

文章浏览阅读2.1k次。function sum(a){ return function(b){ return function(c){return a+b+c}; }}console.log(sum(1)(2)(3).valueOf())_sum(1)(2)(3) 输出 6

RHEL 7.6 操作系统安装(上)_rhel7.6安装教程csdn-程序员宅基地

文章浏览阅读1.1k次。微信公众号:IT邦德目前B站(搜索jeames007)正在直播Mysql、Oracle、Python实战课程详情关注公众号:IT邦德 QQ群:168797397、5871594461.新建虚拟机在这里插入图片描述2.网卡设置3、安装操作系统3.1 成功引导系统后,会出现下面的界面3.2 安装RedHat7.6操作系统,回车,进入下面的界面3.3 选择语言:英文3.4.进入一站式安装界面,在此界面,只需把所有带感叹号的内容全部消除,便可进行安装3.5.时区选择,选_rhel7.6安装教程csdn

MapReduce wordcount测试卡死在running job_wordcount运行卡在running job-程序员宅基地

文章浏览阅读6.8k次,点赞2次,收藏14次。hadoop环境搭建好后,准备用MapReduce自带的wordcount程序测试一下,跑了几次总是卡在Running job那里2018-03-28 08:46:41,855 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.85.3:80322018-03-28 08:46:42,341 INFO..._wordcount运行卡在running job

随便推点

QT入门之main函数中的QApplication a(argc,argv)与exec()作用_qapplication a(argc, argv)-程序员宅基地

文章浏览阅读7.9k次,点赞22次,收藏52次。一个最简单、最初级的QT程序如下所示int main(int argc,char * argv[]){ QApplication a(argc,argv); MainWindow w; w.show(); return a.exec();}(1)QApplication a(argc,argv);定义一个 Qt 应用程序对象,它的构造函数接收和 main 函数一样的参数,是 Qt 图形界面程序的入口,就像 main 函数是普通 C++ 程序的入口一样。(2)re_qapplication a(argc, argv)

rpm包与deb包的制作过程_debian与prm-程序员宅基地

文章浏览阅读1.5k次。制作RPM包第一步:BUILD目录:tar.gz包的解压后存放的位置,并在此目录进行编译安装SPECS目录:存放SPEC文件(important)RPMS目录:存放制作好的rpm包SOURCES目录:存放源代码SRPMS目录:存放编译好的二进制rpm包BUILDROOT目录:在BUILD目录中执行完make install之后生成的目录mkdri -p ~/rpmb..._debian与prm

AWD-LSTM为什么这么棒?_regularizing and optimizing lstm language models-程序员宅基地

文章浏览阅读2.2k次。AWD-LSTM是目前最优秀的语言模型之一。在众多的顶会论文中,对字级模型的研究都采用了AWD-LSTMs,并且它在字符级模型中的表现也同样出色。本文回顾了论文——Regularizing and Optimizing LSTM Language Models,在介绍AWD-LSTM模型的同时并解释其中所涉及的各项策略。该论文提出了一系列基于词的语言模型的正则化和优化策略。这些策略不仅行之有..._regularizing and optimizing lstm language models

centos7安装python3.62出现pip错误_使用yum工具在CentOS7系统下安装python-pip错误时的对应技巧...-程序员宅基地

文章浏览阅读270次。pip简介 pip 是一个Python计算机程序语言写成的软件包管理系统,它可以安装和管理软件包有时我们在使用centos7的软件包管理程序yum安装python-pip的时候会报一下错误:No package python-pip available. Error: Nothing to do翻译过来即是说没有python-pip软件包可以安装。这是因为像centos这类衍生出来的发行版,他们的..._安装 pip时出现 no package python-pip available. error: nothing to do错误、

飞思卡尔MC9S12G64串口发送接收驱动_s12z 串口-程序员宅基地

文章浏览阅读1.6k次。因为之前刚入职,对串口调试不了解,下面整理一下书上的串口程序。 移植性还比较强使用说明:MC9S12系列的串口有两种查询方式 1》使用中断方式查询 2》在主函数中使用轮询的方式的方法进行查询 这两种方法在下面函数中都有体现,需要在用的时候注意分别提取 主要是初始化的SCI1..._s12z 串口

DS Video for Android TV (稳定安装打开版)_ds video tv版-程序员宅基地

文章浏览阅读1.4k次。这个 apk 只支持到 Android 5.0 以上的版本。Android 5.0 以下的就不用试了。要想在普通的 Android 系统电视盒子上使用 DS Video for Android TV 版,DS Video for Android TV 版的 apk 请直接去群晖官网的下载中心下载吧。需要附件里的这个 apk 和 群晖官网下载中心下载的那个 apk 这两个都安装上才可以._ds video tv版

推荐文章

热门文章

相关标签