(面试总结)SSM 整合案例:总体复述
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(面试总结)SSM 整合案例:总体复述相关的知识,希望对你有一定的参考价值。
编写过一个旅游网站后台管理系统
文章目录
一、模板主题
选用模板主题adminLTE进行界面管理
AdminLTE:提供了一系列响应的、可重复使用的组件,同时内置了多个模板页面,通过它可以快速创建一个响应额html5网站
具体学习可参考:一篇文章带你快速入门 AdminLTE
二、功能介绍
(1)商品查询:基于SSM整合基础上完成商品查询,要掌握主面页面main.jsp及商品显示页面product-list.jsp页面的创建
主要就是查询所有的商品 Product(旅游线路),对于所有的查询操作配置了事务通知,设置了只读事务
这里遇到了一个前端和数据库日期交互,状态state属性交互
(2)商品添加:进一步巩固SSM整合,并完成商品添加功能,要注意事务操作以及product-add.jsp页面生成。
(3)订单查询:订单的查询操作,它主要完成简单的多表查询操作,查询订单时,需要查询出与订单关联的产品和会员信息
(4)订单分页查询:订单分页查询,我们使用的是mybatis分页插件PageHelper,要掌握PageHelper的基本使用。
让页面展示的更加美观,分页展示数据,具体使用时通过分页Bean PageInfo
(5)订单详情查询:订单详情是用于查询某一个订单的信息,这个知识点主要考核对复杂的多表查询操作的掌握
这里需要显示与订单关联的会员信息,旅客信息,产品信息
(6)SpringSecurity:Spring Security是 Spring 项目组中用来提供安全认证服务的框架,它的使用很复杂,要掌握spring Security框架的配置及基本的认证与授权操作。
(7)用户管理:用户管理中我们会介绍基于spring Security的用户登录、退出操作。以及用户查询、添加、详情操作,添加角色
用户添加这块,对于输入的密码做了加密处理后才存储到数据库中,用户登录的解密通过 SpringSecurity 实现用户退出也是通过 Springsecurity 实现的
用户详情这块展示的用户关联的角色信息
用户可以添加角色信息,不同的角色信息对应着不同的资源权限路径
(8)角色管理:角色管理主要完成角色查询、角色添加,添加资源权限
(9)资源权限管理:资源权限管理主要完成查询、添加操作,它的操作与角色管理类似
就是指定哪些角色能够访问哪些内容(体现在这个项目中就是对应的URL路径)
(10)权限关联与控制:主要会讲解用户角色关联、角色权限关联
这里主要实现了用户有不同的角色,角色有不同的资源访问权限
体现在两个地方:服务端不同角色有不同的访问方法权限,前端页面不同的角色对应不同的前端显示页面(也就是对于没有权限的角色隐藏一些功能选项,比如 user 权限的用户无法看到日志的功能操作选项)
(11)AOP 日志处理:AOP日志处理,我们使用spring AOP切面来完成系统级别的日志收集。
三、数据库介绍
1. 数据库:Oracle
虚拟机搭建的Oracle服务端,和主机搭建的客户端进行交互
mysql 称为当前数据库有几张表,对应Oracle就是当前数据库有几个用户
Oracle 为每个项目创建单独user,oracle数据表存放在表空间下,每个用户有独立表空间
(也就是先创建表空间,然后创建用户,然后登陆用户进行数据库操作。)
//创建表空间
create tablespace orclTest;
//创建用户记密码:
create user 用户名 identified by 密码;
create user ssm identified by ssm;
//授权:针对某一张表额操作权限,一般设置角色权限:resource,connect
grant connect,resource to 用户名;
grant connect,resource to ssm;
oracle中常用角色:connect(连接角色,基本角色),resource(开发者角色);dba(超级管理员角色)
2. 表结构
还差表结构之间的关系
一共用到了 8张表:
产品表:id,产品编号,路线名称,出发城市,出发时间,产品价格,状态
订单表:id,订单编号,下单时间,出行人数,支付方式,订单状态,产品id
旅客表:id,姓名性别,电话,证件类型,证件号码,旅客类型
会员表:id,姓名,昵称,电话号码,邮箱
用户表:id,邮箱,用户名,密码,电话,状态
角色表:id,角色名,角色描述
资源权限表:id,权限名,权限路径
日志表:id,访问时间,操作者用户名,访问ip,访问资源URL,执行时长,访问方法】
(1)订单表里包括产品表的id,会员表的id
(2)旅客和订单需要中间表order_traveller(旅客id和订单id):旅客与订单之间是多对多关系
(3)用户和角色需要中间表user_role(用户ID,角色id):用户和角色是一对多的关系
(4)角色和资源权限需要中间表role_permission(角色id,资源权限id):权限资源与角色是多对多关系
用户目前设计了两个级别一个超级管理员,一个普通用户,超级管理员拥有所有的角色权限,普通用户拥有自己对应的权限
一共三个中间表
根据表结构,编写对应的实体类,业务层接口,持久层接口
四、框架介绍
分模块创建maven 工程,用到了maven 的聚合思想,目的就是将一个完整的项目拆分成不同的独立模块,哪个地方需要其中的某个模块,就直接调用该模块的坐标即可,这样的好处就是便于维护(如果有需要修改的地方,只需要修改对应的代码即可),增加了代码的可重用性(以后开发新的项目时,可以看是否已经存在现成的模块可以直接使用)
1. Spring
接下来要看,IOC 和 AOP 具体在项目中的体现在哪了?
Spring:以 IOC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,方便解耦,简化开发。
程序讲究的是低耦合,高内聚。就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依存度却要不那么紧密内聚和耦合是密切相关的,同其他模块存在高耦合的模块意味着低内聚,而高内聚的模块意味着该模块同其他模块之间是低耦合。在进行软件设计时,应力争做到高内聚,低耦合
IOC 控制反转:就是把创建对象的权利交给了工厂,自己无法独立自主的控制最终创建的对象,把这种控制权发生的转移称为控制反转,好处就是有效的削减了计算机程序的耦合,即解除代码中的依赖关系
IOC控制反转:比如该项目中将 业务层service对象和持久层dao对象交由spring管理创建对象,存入IOC容器中。具体就是在spring的配置文件中使用bean标签和id,class属性后,默认采用无参构造创建bean对象。
AOP 面向切面编程:简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。
AOP 面向切面编程:
- 该项目利用AOP对事务控制进行了增强,也就是对于业务层中的查找操作(比如查找订单,产品等),进行了事务控制,设置查找操作为只读,传播行为为supports(也就是支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务))
- 也利用了AOP对日志进行了处理,通过把所有的servlet表现层方法当做切入点,进行前置通知,后置通知获取用户的访问时间,访问资源路径,访问时长等信息。
为什么要启用事务:
原子性:整个事务要么全部成功提交要么全部失败回滚
隔离性:一个事务在完成前对其他事务是不可见的
一致性:事务操作前后,数据表中的数据不会发生变化直至成功提交前
持久性:一旦事务提交则会永久保存在数据库中
2. Mybatis
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
它是一个持久层框架,用java编写的,使用了ORM思想实现了结果集的封装。
ORM 思想:
Object Relational Mappging 对象关系映射
简单的说:
就是把数据库表和实体类及实体类的属性对应起来
让我们可以操作实体类就实现操作数据库表。
3. SpringMVC
可能也需要和项目对应下
是一个表现层框架,可以通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。
4. SpringSecurity
是 Spring 项目组中用来提供安全认证服务的框架
简单理解,认证的过程就是,用户名密码登录验证的过程
“授权”指的是一个用户能否在你的应用中执行某个操作,简单理解,就是用户再执行某个操作之前,数据库其实已经给其分配了相应的执行权限,这可以称之为授权
该项目主要就是对该系统用户登录的密码验证,同时实现了服务器方法级权限控制
服务器方法级权限控制:设置哪些角色对哪些方法有访问权限,通过Springsecurity中的@Secured注解实现
页面端标签的权限控制:通过springsecurity设置不同的角色登录显示不同的功能选项
五、遇到的问题
问题:对于前端页面中文的输入,到后端会乱码
问题:原始样式,每页显示多条数据,比较混乱,所以引入了Mybatis 分页插件:PageHelper
可以设置每页显示几条,也可以通过pageInfo设置其他内容比如上一页,下一页,首页,尾页之类的。
问题:在产品查询时涉及出发时间,也就是将数据库中 Date 类型的数据以字符串形式显示到前端页面上,以及添加商品时前端页面输入的是字符串形式的日期需要将其转为 Date类型存储到数据库中
问题:对于用户和产品都有一个status属性,表示该用户和产品的状态(是否开启),数据库中 status 对应的是一个整数值0或1对应是否开启,显示到前端页面时字符串形式的“开启”或“未开启”
问题:用户和角色是多对多的关系,为用户添加角色时,需要借助中间表 users_role,需要传入多个多个参数时,无法找到对应关系
多个参数的数据库保存问题主要针对的是往中间表里的操作
问题:实现了增加用户时,对密码加密处理后存入数据库,配置 SpringSecurity 后会自动对密码进行解密处理
以上是关于(面试总结)SSM 整合案例:总体复述的主要内容,如果未能解决你的问题,请参考以下文章