文章简介:
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请求类型
@RequestMapping (通用,适配所有请求方式)
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)
(处理 Get 请求,主要应用于查询)
3.2POST请求@PostMapping("users")
等价于@RequestMapping(value="/users",method=RequestMethod.POST)
(处理 post 请求,主要应用于新增操作)
3.3.PUT请求@PutMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)
(处理 put 请求,主要应用于更新操作)
3.4DELETE请求@DeleteMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)
(处理 delete 请求,主要应用于删除操作)
3.5PATCH请求
一般实际项目中,我们都是PUT不够用了之后才用 PATCH 请求去更新数据
4.前后端传值
4.1@PathVariable和@RequestParam
@PathVariable用于获取路径参数,(使用@GetMapping 从 rest 风格 url 中取{}变量的值注入给参数)
@RequestParam用于查询参数m(对传统风格 url 参数,请求方法中的 map 参数进行描述)
@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,@ResponseBody
@RequestBody (将客户端 post 请求或者PUT请求的 json 值赋值给 pojo 或 map 参数)
用于读取 Request 请求(可能是 POST,PUT,DELETE,GET 请求)的 body 部分并且Content-Type 为 application/json格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。系统会使用HttpMessageConverter
或者自定义的HttpMessageConverter
将请求的 body 中的 json 字符串转换为 java 对象。
@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
4.3@DateTimeFormat
@DateTimeFormat (假如是 pojo 参数,可以直接描述 pojo 日期属性)
响应结果要做统一封装
@ResponseBody(尽量将响应结果转换为 json 格式)
@JsonFormat(描述 pojo 属性或 get 方法,转 json 时按指定格式转换)
4.4@CrossOrigin
@CrossOrigin实现跨域
@CrossOrigin(origin="*",maxAge=3600)
origin代表允许访问的域列表,*表示可以是任何来源
maxAge代表响应前的缓存持续的最大时间(单位是秒)
@Mapper注解的作用
此注解由mybatis框架提供,用于描述"数据持久层接口",当项目启动时,系统底层会自动扫描启动类所在包以及子包中的类,假如发现某个接口上使用@Mapper注解进行描述,底层会为这个接口创建一个实现类,在实现类的内部定义基于SqlSession对象的会话过程。然后还会将这个类的实例交给spring管理。
@MapperScan("xxx")用在启动类上,通过使用@MapperScan可以指定要扫描的Mapper类的包的路径
@SpringBootApplication
@MapperScan("com.lz.water.monitor.mapper")
public class Application {
@Qualifier("xxxx")
配合@Autowired来指定要注入的名字
但是@Repository注解标注的实现类使用会报错而@Service注解标注的实现类正常。
Tomcat的理解
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用[服务器],在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应[HTML]([标准通用标记语言]下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
tomcat面试题:
Tomcat面试题