SSM框架良心之作

SSM
三大框架 Spring框架 SpringMVC框架 MyBatis框架
**
什么是Spring
一、Spring是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,降低侵入性;
二、Spring提供的IOC和AOP功能,可以将组建的耦合度降至最低,既解耦,便于系统日后的维护和升级
三、Spring为系统提供了一个整体的解决方案,开发者可以利用他本身提供的功能外,也可以与第三方框架和技术整合应用,可以自由选择采用哪种技术进行开发

为什么要用Spring
Spring的本质是管理软件中的对象,既创建对象和维护对象之间的关系

1.Spring框架作用**
可以解决对象创建以及对象之间依赖关系的一种框架。
a.Spring core (IOC功能)
Inversion of Control 控制反转或反向控制
控制反转:改变了对象获取的方式,之前编码方式采用new构造器方式获取对象;ioc中采用
有容器创建对象之后注入进来使用
在这里插入图片描述
b.Spring AOP功能
(管理组件对象,维护对象关系,目的降低组件耦合度)
核心原理:使用动态代理的设计模式在执行方法前后或出现异常做加入相关逻辑

我们主要使用AOP来做:
1.事务处理: 执行方法前,开启事务、执行完成后关闭事务、出现异常后回滚事务
2.权限判断:在执行方法前,判断是否具有权限
3.日志:在执行前进行日志处理

AOP专门用于处理系统中分布于各个模块中的交叉关注点的问题,在JavaEE应用中, 常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案;

在这里插入图片描述

AOP代理其实是由AOP框架动态生成的一个对象,该对象可作为目标对象使用,AOP代理所包含的方法与目标对象的方法如下图所示

AOP通俗的理解
一个组件A,不关心其他常用的服务件B,但是这个组件A使用组件B的时候,不是组件A自身去调用,而是通过配置等其他方式,比如Spring中可以通过xml配置文件,这样就是的使得A压根就不需要知道服务组件B是怎样的,爱存在不存在,爱怎么存在都与A无关,A只关心自身业务逻辑,具体A使用B的时候,配置文件去做,与具体的A组件无关
c.Spring Web MVC 功能
(MVC设计,目的架构一个MVC结构的web程序)
d.与其他技术进行整合

2.SpringMVC框架的作用 (解决控制器层存在的问题)
解决了V-C之间的问题,简化开发。
V表示View,即视图,通常表现为HTML或JSP页面,C表示Controller,即控制器,在此前的学习中,表示的是Servlet。
原有的Controller,即Servlet存在的问题:默认情况下,每个Servlet对应1个请求路径,在实际项目开发中,就可能存在请求路径的种类较多,进而Servlet的数量也会较多,存在的问题就比较明显:配置复杂、管理难度大、Servlet实例太多,内存开销大……
3.MyBatis框架作用 (解决持久层存在的问题)
解决持久层数据处理的问题,主要是基于JDBC技术的原生代码比较繁琐,没有经过任何优化,开发甚至执行效率低下!
使用MyBatis框架时,不必关心JDBC技术如何实现,只需要编写需要执行的操作的抽象方法,例如User findById(Integer id),然后,为这个方法映射所需执行的SQL语句即可。
4.AJAX的作用
在Java EE中,常见的响应方式有:转发和重定向。
无论是转发,还是重定向,都是由服务器端完成最终页面的显示,具体的表现为:用户提交请求后,页面完全由服务器端来完成!并且,伴随着页面的“刷新”!
例如:当用户尝试登录时,假设用户名错误,只能转发到某个页面(可能是错误提示页面),或重定向到某个页面,无论是哪种操作,用户在浏览器中看到的都不会再是原有的页面了!
使用这种做法,主要问题在于:(1)用户体验非常差;(2)服务器端压力较大,用户的请求次数也可能较多!(3)不适用于多种不同的客户端,例如PC端的浏览器、Android APP、iOS APP……
其实,服务器端并不一定需要把页面都处理掉,更多的应该是告之客户端此次操作的结果,例如客户端尝试登录时,服务器端应该给出“登录成功”或“登录失败!用户名或密码错误!”此类的结果即可,至于界面如何处理,可以交给客户端程序(例如Javascript)去进行处理!
SpringBoot

  1. 基本概念
    每次创建新的SSM项目,都需要:创建Maven项目,添加依赖,配置web.xml,添加spring的配置文件,进行springmvc的相关配置,添加数据库的配置文件,配置mybatis等……准备工作相当的多,而且,随着项目的深入,可能还需要在开发过程中添加新的依赖或新的配置。
    事实上,每个不同的项目,经历以上的过程是极为相似的!
    使用SpringBoot可以快速的创建项目,却不用关心以上各种配置,在SpringBoot中,有一项开发理念就是“约定大于配置”,即:大多数人共同遵守的配置习惯,将在SpringBoot中成为默认配置,开发者就不必再关心这些配置了!
    当然,SpringBoot还有更多特性,后续再补充!

重要 接下来介绍在框架操作时的操作流程!!!

SSM项目流程图

图下面这三个层的作用需要大家重点记住!!!
Controller层 Service层 Mybatis持久层框架
1.表单校验 1.校验查询条件 Dao层
2.控制跳转 2.调用Dao层 1.执行数据库操作
3.调用服务 3.业务逻辑处理 2.事务控制
4.异常处理 4.数据封装 3.持久化数据
5.异常处理 4.连接数据库
6.事务处理

**框架运行控制器层 到业务层 再到持久层!!!**

SpringMVC流程图帮助大家来理解
接下来就是流程顺序
持久层操作结束,接下来需要在test层进行测试,确保在业务层 再到控制器层不会出现错误
1.创建数据库
2.创建实体类
3.持久层
3.1持久层接口mapper
3.2持久层配置xml
4.业务层
4.1业务接口
4.2业务异常
4.3业务实现类
业务层进行测试
5.控制器层
5.1控制器异常
控制器层进行测试

详细介绍!!!!!
1.创建数据库
在这里插入图片描述
2.创建实体类

public class User extends BaseEntity{
	/**
	 *实体类
	 1.实现序列化
	 完成get set方法 
	 这里面的变量不一定要和数据库里面的名字一样
	 */
	private static final long serialVersionUID = -1593226973032208283L;
	private Integer id;
	private String username;
	private String password ;
	private String salt ;
	private Integer gender ;
	private String phone ;
	private String email ;
	private String avatar ;
	private Integer isDelete;

接下来项目的操作顺序 第一、持久层 ; 第二、业务层 ; 第三、控制器层;
3.持久层
3.1持久层接口mapper

/**
 * 收货地址的持久层接口
 */
public interface AddressMapper {	
	/**
	 * 增加新的收货地址数据
	 * @param address 收货地址数据
	 * @return 受影响的行数
	 */
	Integer addnew(Address address);

3.2持久层配置xml

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
	<!--映射接口文件  -->
 <mapper namespace="cn.tedu.store.mapper.UserMapper">
 <!-- 插入用户数据 -->
 <!--Integer addnew(User user);  -->
 <insert id="addnew"
 	parameterType="cn.tedu.store.entity.User"
 	useGeneratedKeys="true"
 	keyProperty="id">
 	insert into t_user (
 		username,password,
 		salt,gender,
 		phone,email,
 		avatar, is_delete,
 		created_user,created_time,
 		modified_user,modified_time	
 	) values(
 		#{username},#{password},
 		#{salt},#{gender},
 		#{phone},#{email},
 		#{avatar},#{isDelete},
 		#{createdUser},#{createdTime},
 		#{modifiedUser},#{modifiedTime}	
 	
 	)
 	
 </insert>

持久层操作结束,接下来需要在test层进行测试,确保在业务层 再到控制器层不会出现错误
4.业务层
4.1业务接口

在这里插入图片描述

4.2业务异常
在这里插入图片描述
4.3业务实现类

@Service
public class UserServiceImpl implements IUserService{

	@Autowired private UserMapper userMapper;


	@Override
	public void changeInfo(User user) throws UpDateException, UserNotFoundException {
		System.out.println(user);
		// 根据user.getId()查询用户数据
		User data=findById(user.getId());
		System.out.println(data);
		// 判断数据是否为null
		if(data==null) {
			// 是:抛出:UserNotFoundException	
			throw new UserNotFoundException("您查询的用户不存在");
		}
		// 判断is_delete是否为1
		if(data.getIsDelete()==1) {
			// 是:抛出:UserNotFoundException
			throw new UserNotFoundException("您查询的用户已被删除");
		}
		// 向参数对象中封装:
		// - modified_user > data.getUsername()
		user.setModifiedUser(data.getUsername()); 
		
		// - modified_time > new Date()
		user.setModifiedTime(new Date());
		// 执行修改:gender,phone,email,modified_user,modified_time
		System.out.println(user);
		
		updateInfo(user);
		System.out.println("修改完毕");
	}

业务层进行测试
5.控制器层
在这里插入图片描述
5.1控制器异常
在这里插入图片描述
控制器层进行测试
接下来不同层的具体使用会再接下来的文章中介绍!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值