SSM框架详解

SSM框架详解

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

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

本文视频讲解

文章目录

    • SSM框架详解
  • 一、项目结构
    • src/com.jingmall
    • WebRoot
    • pom.xml
  • 二、SSM框架原理
    • SpringMVC
    • Spring
    • MyBatis
  • 三、管理员登录实例

一、项目结构

SSM框架详解_第1张图片

src/com.jingmall

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

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

WebRoot

SSM框架详解_第9张图片
resource存放静态资源文件,如一些前端文件,css、js、图片等。

WEB-INF/jsp是前端页面,对应MVC中的V,视图。
SSM框架详解_第10张图片
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
SSM框架详解_第11张图片在这里插入图片描述

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

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

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

看回LoginController.java,继续看下一个方法,管理员登录验证checkLogin()
SSM框架详解_第14张图片
传进来的参数是一个Manager类型的对象,所以需要先写Manager实体类

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

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

你可能感兴趣的:(面试,学习路线,阿里巴巴,java,spring,开发语言,python,pygame)