文章简介:
SSM框架集简介
spring框架IOC的理解
mybatis框架sqlSessionFactory理解
Tomcat的理解
图解SSM
SSM框架常用注解
1.SSM框架集简介
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架
Spring
Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。
Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new
一个对象,而是让Spring框架帮你来完成这一切。
SpringMVC
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
mybatis
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。
图解SSM
简单的WEB项目框架图
客户端访问服务端对数据库进行简单操作:
1.SpringMVC的Interceptor拦截器对客户端向服务端发送的请求进行处理
2.分发器(DispacherServlet)分发请求返回model
3.SpringMVC的控制层(controller)将请求传递到业务逻辑层(service)
4.业务逻辑层的接口实现类对请求处理并传递到持久层(Mabatis)
5.数据持久层(Dao接口)接收请求并调用方法对数据进行操作返回ModelAndView
6.DispacherServlet查询视图解析器,找到ModelAndView指定的视图
7.视图负责将结果显示到客户端
SSM框架常用注解
1.@SpringBootApplication
这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。
package com.cy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class NoticesApplication {
public static void main(String[] args) {
SpringApplication.run(NoticesApplication.class, args);
}
}
2.Spring Bean相关
2.1 @Autowired
由spring提供,可以描述属性,构造方法,set方法等。
用于告诉spring框架,为属性或方法参数采用一定的策略进行赋值操作(DI)。
自动导入对象到类中,被注入进的类同样要被 Spring 容器管理。比如Dao类注入到测试类中
package com.cy.pj;
import com.cy.pj.dao.SysNoticeDao;
import com.cy.pj.dao.pojo.SysNoticePojo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class SysNoticesTest {
@Autowired
private SysNoticeDao sysNoticeDao;
@Test
void testInsertNotice(){
//创建sysnotice对象,通过此对象封装要写入到数据库的数据
SysNoticePojo sysNoticePojo=new SysNoticePojo();
sysNoticePojo.setTitle("时间");
sysNoticePojo.setContent("2021/5/20");
sysNoticePojo.setStatus("1");
sysNoticePojo.setType("1");
sysNoticePojo.setCreatedUser("tony");
sysNoticePojo.setModifiedUser("tony");
//将sysnoticepojo对象持久化到数据库
sysNoticeDao.insertNotices(sysNoticePojo);
//此方法的实现内部会通过SQLSession向表中写数据
}
2.2@Component,@Repository,@Service,@Controller
我们一般使用@Autowired注解让Spring容器帮我们自动装配bean。想要把类表识成可用于@Autowired注解自动装配的bean类,可以采用这四个注解实现
- @Component:通用的注解,可表识任意类为spring组件。如果一个bean不知道属于哪个层,可以采用@Component注解表识
- @Repository:对应持久层即Dao层,主要用于数据库相关操作
- @Service:对应服务层,主要涉及一些复杂的逻辑,需要用到Dao层
- @Controller:对应Spring MVC控制层,主要用于用户接收用户请求并调用Service层返回数据给前端页面
2.3@RestController
@RestController注解是@Controller和@ResponseBody的合集,表示这是一个控制器bean,并且将函数的返回值直接填入HTTP响应体中。
2.4@Scope
声明 Spring Bean 的作用域
四种常见的Spring Bean的作用域:
singleton:唯一bean实例,Spring中的bean默认都是单例的。
prototype:每次请求都会创建一个新的bean实例。
request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
2.5@Configuration
一般用来声明配置类,可以使用@Component注解代替。
3.处理常见的HTTP请求类型
GET:请求从服务器获取特定资源。举个例子:GET /users
(获取所有学生)
POST:在服务器上创建一个新的资源。举个例子:POST /users
(创建学生)
PUT:更新服务器上的资源(客户端提供更新后的整个资源)。举个例子:PUT /users/12
(更新编号为 12 的学生)
DELETE:从服务器删除特定的资源。举个例子:DELETE /users/12
(删除编号为 12 的学生)
PATCH:更新服务器上的资源(客户端提供更改的属性,可以看做作是部分更新),使用的比较少,这里就不举例子了
3.1GET请求@GetMapping("users")
等价于@RequestMapping(value="/users",method=RequestMethod.GET)
3.2POST请求@PostMapping("users")
等价于@RequestMapping(value="/users",method=RequestMethod.POST)
3.3.PUT请求@PutMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)
3.4DELETE请求@DeleteMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)
3.5PATCH请求
一般实际项目中,我们都是PUT不够用了之后才用 PATCH 请求去更新数据
4.前后端传值
4.1@PathVariable和@RequestParam
@PathVariable用于获取路径参数,@RequestParam用于查询参数
@GetMapping("/klasses/{klassId}/teachers")
public List getKlassRelatedTeachers(
@PathVariable("klassId") Long klassId,
@RequestParam(value = "type", required = false) String type )
{}
如果我们请求的 url 是:/klasses/{123456}/teachers?type=web
那么我们服务获取到的数据就是:klassId=123456,type=web
。
4.2@RequestBody
用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且Content-Type 为 application/json格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用HttpMessageConverter
或者自定义的HttpMessageConverter
将请求的 body 中的 json 字符串转换为 java 对象。
@Mapper注解的作用
次注解由mybatis框架提供,用于描述“数据持久层接口”,当项目启动时,系统底层会自动扫描启动类
@Mapper
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加
4.3@CrossOrigin
@CrossOrigin实现跨域
@CrossOrigin(origin="*",maxAge=3600)
origin代表允许访问的域列表,*表示可以是任何来源
maxAge代表响应前的缓存持续的最大时间(单位是秒)