乐趣区

关于java:ssm框架理解

文章简介:

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 类,能够采纳这四个注解实现

  1. @Component: 通用的注解,可表识任意类为 spring 组件。如果一个 bean 不晓得属于哪个层,能够采纳 @Component 注解表识
  2. @Repository: 对应长久层即 Dao 层,次要用于数据库相干操作
  3. @Service: 对应服务层,次要波及一些简单的逻辑,须要用到 Dao 层
  4. @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<Teacher> 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 框架提供,用于形容“数据长久层接口”,当我的项目启动时,零碎底层会主动扫描启动类

退出移动版